From 49ad47dde21d08d9cdd8e19da9c3749040289c66 Mon Sep 17 00:00:00 2001 From: Sergii Stotskyi Date: Thu, 6 Jul 2017 11:11:29 +0300 Subject: [PATCH 0001/1298] refactor(project): replaces lodash with native Array methods For older browsers added Array.prototype.find shim --- README.md | 6 +- bower.json | 1 - demo/anijs.html | 4 +- demo/float.html | 2 +- demo/knockout.html | 4 +- demo/knockout2.html | 4 +- demo/nested.html | 2 +- demo/responsive.html | 4 +- demo/rtl.html | 7 +- demo/serialization.html | 8 +- demo/two.html | 10 +- dist/gridstack.all.js | 6 +- dist/gridstack.jQueryUI.js | 13 +- dist/gridstack.jQueryUI.min.js | 2 +- dist/gridstack.js | 163 +++++++++++++++-------- dist/gridstack.min.js | 4 +- dist/gridstack.min.map | 2 +- karma.conf.js | 4 +- package.json | 8 +- spec/e2e/html/gridstack-with-height.html | 2 +- spec/gridstack-engine-spec.js | 2 +- src/gridstack.jQueryUI.js | 13 +- src/gridstack.js | 163 +++++++++++++++-------- 23 files changed, 271 insertions(+), 163 deletions(-) diff --git a/README.md b/README.md index 1bf790473..b44b20269 100644 --- a/README.md +++ b/README.md @@ -57,10 +57,8 @@ Usage ## Requirements -* [lodash.js](https://lodash.com) (>= 3.5.0, full build) * [jQuery](http://jquery.com) (>= 3.1.0) - -Note: You can still use [underscore.js](http://underscorejs.org) (>= 1.7.0) instead of lodash.js +* `Array.prototype.find` for IE and older browsers ([core.js](https://github.com/zloirock/core-js#ecmascript-6-array) allows to include specific polyfills) #### Using gridstack.js with jQuery UI @@ -155,7 +153,7 @@ Please use [jQuery UI Touch Punch](https://github.com/furf/jquery-ui-touch-punch working on touch-based devices. ```html - + diff --git a/bower.json b/bower.json index 34824238a..98a1855ef 100644 --- a/bower.json +++ b/bower.json @@ -14,7 +14,6 @@ "amd" ], "dependencies": { - "lodash": ">= 4.14.2", "jquery": ">= 3.1.0", "jquery-ui": ">= 1.12.0" }, diff --git a/demo/anijs.html b/demo/anijs.html index 6d66b428c..d8898493c 100644 --- a/demo/anijs.html +++ b/demo/anijs.html @@ -18,7 +18,7 @@ - + @@ -86,4 +86,4 @@

Widget added

}); - \ No newline at end of file + diff --git a/demo/float.html b/demo/float.html index e1a968db8..9c3d9f430 100644 --- a/demo/float.html +++ b/demo/float.html @@ -16,7 +16,7 @@ - + diff --git a/demo/knockout.html b/demo/knockout.html index 0c20e1955..a7677333e 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@

knockout.js Demo

}).data('gridstack'); } - var item = _.find(items, function (i) { return i.nodeType == 1 }); + var item = items.find(function (i) { return i.nodeType == 1 }); grid.addWidget(item); ko.utils.domNodeDisposal.addDisposeCallback(item, function () { grid.removeWidget(item); diff --git a/demo/knockout2.html b/demo/knockout2.html index 0b3ebee1c..f7beb9287 100644 --- a/demo/knockout2.html +++ b/demo/knockout2.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,7 @@

knockout.js Demo

}).data('gridstack'); } - var item = _.find(items, function (i) { return i.nodeType == 1 }); + var item = items.find(function (i) { return i.nodeType == 1 }); grid.addWidget(item); ko.utils.domNodeDisposal.addDisposeCallback(item, function () { grid.removeWidget(item); diff --git a/demo/nested.html b/demo/nested.html index 4b451e22e..607d1093d 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -16,7 +16,7 @@ - + diff --git a/demo/responsive.html b/demo/responsive.html index d07dfc832..98f05d56d 100644 --- a/demo/responsive.html +++ b/demo/responsive.html @@ -17,7 +17,7 @@ - + @@ -106,7 +106,7 @@

Responsive grid demo

this.loadGrid = function () { this.grid.removeAll(); var items = GridStackUI.Utils.sort(this.serializedData); - _.each(items, function (node, i) { + items.forEach(function (node, i) { this.grid.addWidget($('
' + i + '
'), node.x, node.y, node.width, node.height); }, this); diff --git a/demo/rtl.html b/demo/rtl.html index 0f27dafd0..564cfbab0 100644 --- a/demo/rtl.html +++ b/demo/rtl.html @@ -16,7 +16,7 @@ - + @@ -62,7 +62,7 @@

RTL Demo

}).data('gridstack'); } - var item = _.find(items, function (i) { return i.nodeType == 1 }); + var item = items.find(function (i) { return i.nodeType == 1 }); grid.addWidget(item); ko.utils.domNodeDisposal.addDisposeCallback(item, function () { grid.removeWidget(item); @@ -95,7 +95,8 @@

RTL Demo

y: 0, width: Math.floor(1 + 3 * Math.random()), height: Math.floor(1 + 3 * Math.random()), - auto_position: true + auto_position: true, + index: 'auto' }); return false; }; diff --git a/demo/serialization.html b/demo/serialization.html index a58e847c1..3f5bea8c2 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -16,7 +16,7 @@ - + @@ -76,7 +76,7 @@

Serialization demo

this.loadGrid = function () { this.grid.removeAll(); var items = GridStackUI.Utils.sort(this.serializedData); - _.each(items, function (node) { + items.forEach(function (node) { this.grid.addWidget($('
'), node.x, node.y, node.width, node.height); }, this); @@ -84,7 +84,7 @@

Serialization demo

}.bind(this); this.saveGrid = function () { - this.serializedData = _.map($('.grid-stack > .grid-stack-item:visible'), function (el) { + this.serializedData = $('.grid-stack > .grid-stack-item:visible').map(function (i, el) { el = $(el); var node = el.data('_gridstack_node'); return { @@ -93,7 +93,7 @@

Serialization demo

width: node.width, height: node.height }; - }, this); + }).toArray(); $('#saved-data').val(JSON.stringify(this.serializedData, null, ' ')); return false; }.bind(this); diff --git a/demo/two.html b/demo/two.html index 852eab1d8..c1f8d9a9d 100644 --- a/demo/two.html +++ b/demo/two.html @@ -17,7 +17,7 @@ - + @@ -113,9 +113,9 @@

Two grids demo

acceptWidgets: '.grid-stack-item' }; $('#grid1').gridstack(options); - $('#grid2').gridstack(_.defaults({ + $('#grid2').gridstack($.extend({}, options, { float: true - }, options)); + })); var items = [ {x: 0, y: 0, width: 2, height: 2}, @@ -128,10 +128,10 @@

Two grids demo

$('.grid-stack').each(function () { var grid = $(this).data('gridstack'); - _.each(items, function (node) { + items.forEach(function (node) { grid.addWidget($('
'), node.x, node.y, node.width, node.height); - }, this); + }); }); $('.sidebar .grid-stack-item').draggable({ diff --git a/dist/gridstack.all.js b/dist/gridstack.all.js index c4e0d0305..2c9db0688 100644 --- a/dist/gridstack.all.js +++ b/dist/gridstack.all.js @@ -5,13 +5,13 @@ * gridstack.js may be freely distributed under the MIT license. * @preserve */ -!function(a){if("function"==typeof define&&define.amd)define(["jquery","lodash"],a);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(a){}try{_=require("lodash")}catch(a){}a(jQuery,_)}else a(jQuery,_)}(function(a,b){function c(a){this.grid=a}var d=window,e=function(a,b,c){var d=function(){return console.warn("gridstack.js: Function `"+b+"` is deprecated as of v0.2.5 and has been replaced with `"+c+"`. It will be **completely** removed in v1.0."),a.apply(this,arguments)};return d.prototype=a.prototype,d},f=function(a,b){console.warn("gridstack.js: Option `"+a+"` is deprecated as of v0.2.5 and has been replaced with `"+b+"`. It will be **completely** removed in v1.0.")},g={isIntercepted:function(a,b){return!(a.x+a.width<=b.x||b.x+b.width<=a.x||a.y+a.height<=b.y||b.y+b.height<=a.y)},sort:function(a,c,d){return d=d||b.chain(a).map(function(a){return a.x+a.width}).max().value(),c=-1!=c?1:-1,b.sortBy(a,function(a){return c*(a.x+a.y*d)})},createStylesheet:function(a){var b=document.createElement("style");return b.setAttribute("type","text/css"),b.setAttribute("data-gs-style-id",a),b.styleSheet?b.styleSheet.cssText="":b.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(b),b.sheet},removeStylesheet:function(b){a("STYLE[data-gs-style-id="+b+"]").remove()},insertCSSRule:function(a,b,c,d){"function"==typeof a.insertRule?a.insertRule(b+"{"+c+"}",d):"function"==typeof a.addRule&&a.addRule(b,c,d)},toBool:function(a){return"boolean"==typeof a?a:"string"==typeof a?!(""===(a=a.toLowerCase())||"no"==a||"false"==a||"0"==a):Boolean(a)},_collisionNodeCheck:function(a){return a!=this.node&&g.isIntercepted(a,this.nn)},_didCollide:function(a){return g.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},a)},_isAddNodeIntercepted:function(a){return g.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},a)},parseHeight:function(a){var c=a,d="px";if(c&&b.isString(c)){var e=c.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!e)throw new Error("Invalid height");d=e[2]||"px",c=parseFloat(e[1])}return{height:c,unit:d}}};g.is_intercepted=e(g.isIntercepted,"is_intercepted","isIntercepted"),g.create_stylesheet=e(g.createStylesheet,"create_stylesheet","createStylesheet"),g.remove_stylesheet=e(g.removeStylesheet,"remove_stylesheet","removeStylesheet"),g.insert_css_rule=e(g.insertCSSRule,"insert_css_rule","insertCSSRule"),c.registeredPlugins=[],c.registerPlugin=function(a){c.registeredPlugins.push(a)},c.prototype.resizable=function(a,b){return this},c.prototype.draggable=function(a,b){return this},c.prototype.droppable=function(a,b){return this},c.prototype.isDroppable=function(a){return!1},c.prototype.on=function(a,b,c){return this};var h=0,i=function(a,b,c,d,e){this.width=a,this.float=c||!1,this.height=d||0,this.nodes=e||[],this.onchange=b||function(){},this._updateCounter=0,this._float=this.float,this._addedNodes=[],this._removedNodes=[]};i.prototype.batchUpdate=function(){this._updateCounter=1,this.float=!0},i.prototype.commit=function(){0!==this._updateCounter&&(this._updateCounter=0,this.float=this._float,this._packNodes(),this._notify())},i.prototype.getNodeDataByDOMEl=function(a){return b.find(this.nodes,function(b){return a.get(0)===b.el.get(0)})},i.prototype._fixCollisions=function(a){this._sortNodes(-1);var c=a,d=Boolean(b.find(this.nodes,function(a){return a.locked}));for(this.float||d||(c={x:0,y:a.y,width:this.width,height:a.height});;){var e=b.find(this.nodes,b.bind(g._collisionNodeCheck,{node:a,nn:c}));if(void 0===e)return;this.moveNode(e,e.x,a.y+a.height,e.width,e.height,!0)}},i.prototype.isAreaEmpty=function(a,c,d,e){var f={x:a||0,y:c||0,width:d||1,height:e||1},h=b.find(this.nodes,b.bind(function(a){return g.isIntercepted(a,f)},this));return null===h||void 0===h},i.prototype._sortNodes=function(a){this.nodes=g.sort(this.nodes,a,this.width)},i.prototype._packNodes=function(){this._sortNodes(),this.float?b.each(this.nodes,b.bind(function(a,c){if(!a._updating&&void 0!==a._origY&&a.y!=a._origY)for(var d=a.y;d>=a._origY;){var e=b.chain(this.nodes).find(b.bind(g._didCollide,{n:a,newY:d})).value();e||(a._dirty=!0,a.y=d),--d}},this)):b.each(this.nodes,b.bind(function(a,c){if(!a.locked)for(;a.y>0;){var d=a.y-1,e=0===c;if(c>0){var f=b.chain(this.nodes).take(c).find(b.bind(g._didCollide,{n:a,newY:d})).value();e=void 0===f}if(!e)break;a._dirty=a.y!=d,a.y=d}},this))},i.prototype._prepareNode=function(a,c){return a=b.defaults(a||{},{width:1,height:1,x:0,y:0}),a.x=parseInt(""+a.x),a.y=parseInt(""+a.y),a.width=parseInt(""+a.width),a.height=parseInt(""+a.height),a.autoPosition=a.autoPosition||!1,a.noResize=a.noResize||!1,a.noMove=a.noMove||!1,a.width>this.width?a.width=this.width:a.width<1&&(a.width=1),a.height<1&&(a.height=1),a.x<0&&(a.x=0),a.x+a.width>this.width&&(c?a.width=this.width-a.x:a.x=this.width-a.width),a.y<0&&(a.y=0),a},i.prototype._notify=function(){var a=Array.prototype.slice.call(arguments,0);if(a[0]=void 0===a[0]?[]:[a[0]],a[1]=void 0===a[1]||a[1],!this._updateCounter){var b=a[0].concat(this.getDirtyNodes());this.onchange(b,a[1])}},i.prototype.cleanNodes=function(){this._updateCounter||b.each(this.nodes,function(a){a._dirty=!1})},i.prototype.getDirtyNodes=function(){return b.filter(this.nodes,function(a){return a._dirty})},i.prototype.addNode=function(a,c){if(a=this._prepareNode(a),void 0!==a.maxWidth&&(a.width=Math.min(a.width,a.maxWidth)),void 0!==a.maxHeight&&(a.height=Math.min(a.height,a.maxHeight)),void 0!==a.minWidth&&(a.width=Math.max(a.width,a.minWidth)),void 0!==a.minHeight&&(a.height=Math.max(a.height,a.minHeight)),a._id=++h,a._dirty=!0,a.autoPosition){this._sortNodes();for(var d=0;;++d){var e=d%this.width,f=Math.floor(d/this.width);if(!(e+a.width>this.width)&&!b.find(this.nodes,b.bind(g._isAddNodeIntercepted,{x:e,y:f,node:a}))){a.x=e,a.y=f;break}}}return this.nodes.push(a),void 0!==c&&c&&this._addedNodes.push(b.clone(a)),this._fixCollisions(a),this._packNodes(),this._notify(),a},i.prototype.removeNode=function(a,c){c=void 0===c||c,this._removedNodes.push(b.clone(a)),a._id=null,this.nodes=b.without(this.nodes,a),this._packNodes(),this._notify(a,c)},i.prototype.canMoveNode=function(c,d,e,f,g){if(!this.isNodeChangedPosition(c,d,e,f,g))return!1;var h=Boolean(b.find(this.nodes,function(a){return a.locked}));if(!this.height&&!h)return!0;var j,k=new i(this.width,null,this.float,0,b.map(this.nodes,function(b){return b==c?j=a.extend({},b):a.extend({},b)}));if(void 0===j)return!0;k.moveNode(j,d,e,f,g);var l=!0;return h&&(l&=!Boolean(b.find(k.nodes,function(a){return a!=j&&Boolean(a.locked)&&Boolean(a._dirty)}))),this.height&&(l&=k.getGridHeight()<=this.height),l},i.prototype.canBePlacedWithRespectToHeight=function(c){if(!this.height)return!0;var d=new i(this.width,null,this.float,0,b.map(this.nodes,function(b){return a.extend({},b)}));return d.addNode(c),d.getGridHeight()<=this.height},i.prototype.isNodeChangedPosition=function(a,b,c,d,e){return"number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x!=b||a.y!=c||a.width!=d||a.height!=e},i.prototype.moveNode=function(a,b,c,d,e,f){if(!this.isNodeChangedPosition(a,b,c,d,e))return a;if("number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x==b&&a.y==c&&a.width==d&&a.height==e)return a;var g=a.width!=d;return a._dirty=!0,a.x=b,a.y=c,a.width=d,a.height=e,a.lastTriedX=b,a.lastTriedY=c,a.lastTriedWidth=d,a.lastTriedHeight=e,a=this._prepareNode(a,g),this._fixCollisions(a),f||(this._packNodes(),this._notify()),a},i.prototype.getGridHeight=function(){return b.reduce(this.nodes,function(a,b){return Math.max(a,b.y+b.height)},0)},i.prototype.beginUpdate=function(a){b.each(this.nodes,function(a){a._origY=a.y}),a._updating=!0},i.prototype.endUpdate=function(){b.each(this.nodes,function(a){a._origY=a.y});var a=b.find(this.nodes,function(a){return a._updating});a&&(a._updating=!1)};var j=function(d,e){var g,h,j=this;e=e||{},this.container=a(d),void 0!==e.handle_class&&(e.handleClass=e.handle_class,f("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,f("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,f("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,f("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,f("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,f("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,f("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,f("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,f("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,f("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var k=this.container.closest("."+e.itemClass).length>0;if(this.opts=b.defaults(e||{},{width:parseInt(this.container.attr("data-gs-width"))||12,height:parseInt(this.container.attr("data-gs-height"))||0,itemClass:"grid-stack-item",placeholderClass:"grid-stack-placeholder",placeholderText:"",handle:".grid-stack-item-content",handleClass:null,cellHeight:60,verticalMargin:20,auto:!0,minWidth:768,float:!1,staticGrid:!1,_class:"grid-stack-instance-"+(1e4*Math.random()).toFixed(0),animate:Boolean(this.container.attr("data-gs-animate"))||!1,alwaysShowResizeHandle:e.alwaysShowResizeHandle||!1,resizable:b.defaults(e.resizable||{},{autoHide:!e.alwaysShowResizeHandle,handles:"se"}),draggable:b.defaults(e.draggable||{},{handle:(e.handleClass?"."+e.handleClass:e.handle?e.handle:"")||".grid-stack-item-content",scroll:!1,appendTo:"body"}),disableDrag:e.disableDrag||!1,disableResize:e.disableResize||!1,rtl:"auto",removable:!1,removeTimeout:2e3,verticalMarginUnit:"px",cellHeightUnit:"px",disableOneColumnMode:e.disableOneColumnMode||!1,oneColumnModeClass:e.oneColumnModeClass||"grid-stack-one-column-mode",ddPlugin:null}),!1===this.opts.ddPlugin?this.opts.ddPlugin=c:null===this.opts.ddPlugin&&(this.opts.ddPlugin=b.first(c.registeredPlugins)||c),this.dd=new this.opts.ddPlugin(this),"auto"===this.opts.rtl&&(this.opts.rtl="rtl"===this.container.css("direction")),this.opts.rtl&&this.container.addClass("grid-stack-rtl"),this.opts.isNested=k,h="auto"===this.opts.cellHeight,h?j.cellHeight(j.cellWidth(),!0):this.cellHeight(this.opts.cellHeight,!0),this.verticalMargin(this.opts.verticalMargin,!0),this.container.addClass(this.opts._class),this._setStaticClass(),k&&this.container.addClass("grid-stack-nested"),this._initStyles(),this.grid=new i(this.opts.width,function(a,c){c=void 0===c||c;var d=0;b.each(a,function(a){c&&null===a._id?a.el&&a.el.remove():(a.el.attr("data-gs-x",a.x).attr("data-gs-y",a.y).attr("data-gs-width",a.width).attr("data-gs-height",a.height),d=Math.max(d,a.y+a.height))}),j._updateStyles(d+10)},this.opts.float,this.opts.height),this.opts.auto){var l=[],m=this;this.container.children("."+this.opts.itemClass+":not(."+this.opts.placeholderClass+")").each(function(b,c){c=a(c),l.push({el:c,i:parseInt(c.attr("data-gs-x"))+parseInt(c.attr("data-gs-y"))*m.opts.width})}),b.chain(l).sortBy(function(a){return a.i}).each(function(a){j._prepareElement(a.el)}).value()}if(this.setAnimation(this.opts.animate),this.placeholder=a('
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=b.throttle(function(){j.cellHeight(j.cellWidth(),!1)},100),this.onResizeHandler=function(){if(h&&j._updateHeightsOnResize(),j._isOneColumnMode()&&!j.opts.disableOneColumnMode){if(g)return;j.container.addClass(j.opts.oneColumnModeClass),g=!0,j.grid._sortNodes(),b.each(j.grid.nodes,function(a){j.container.append(a.el),j.opts.staticGrid||(j.dd.draggable(a.el,"disable"),j.dd.resizable(a.el,"disable"),a.el.trigger("resize"))})}else{if(!g)return;if(j.container.removeClass(j.opts.oneColumnModeClass),g=!1,j.opts.staticGrid)return;b.each(j.grid.nodes,function(a){a.noMove||j.opts.disableDrag||j.dd.draggable(a.el,"enable"),a.noResize||j.opts.disableResize||j.dd.resizable(a.el,"enable"),a.el.trigger("resize")})}},a(window).resize(this.onResizeHandler),this.onResizeHandler(),!j.opts.staticGrid&&"string"==typeof j.opts.removable){var n=a(j.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,{accept:"."+j.opts.itemClass}),this.dd.on(n,"dropover",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._setupRemovingTimeout(d)}).on(n,"dropout",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._clearRemovingTimeout(d)})}if(!j.opts.staticGrid&&j.opts.acceptWidgets){var o=null,p=function(a,b){var c=o,d=c.data("_gridstack_node"),e=j.getCellFromPixel(b.offset,!0),f=Math.max(0,e.x),g=Math.max(0,e.y);if(d._added){if(!j.grid.canMoveNode(d,f,g))return;j.grid.moveNode(d,f,g),j._updateContainerHeight()}else d._added=!0,d.el=c,d.x=f,d.y=g,j.grid.cleanNodes(),j.grid.beginUpdate(d),j.grid.addNode(d),j.container.append(j.placeholder),j.placeholder.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).show(),d.el=j.placeholder,d._beforeDragX=d.x,d._beforeDragY=d.y,j._updateContainerHeight()};this.dd.droppable(j.container,{accept:function(b){b=a(b);var c=b.data("_gridstack_node");return(!c||c._grid!==j)&&b.is(!0===j.opts.acceptWidgets?".grid-stack-item":j.opts.acceptWidgets)}}).on(j.container,"dropover",function(b,c){var d=(j.container.offset(),a(c.draggable)),e=j.cellWidth(),f=j.cellHeight(),g=d.data("_gridstack_node"),h=g?g.width:Math.ceil(d.outerWidth()/e),i=g?g.height:Math.ceil(d.outerHeight()/f);o=d;var k=j.grid._prepareNode({width:h,height:i,_added:!1,_temporary:!0});d.data("_gridstack_node",k),d.data("_gridstack_node_orig",g),d.on("drag",p)}).on(j.container,"dropout",function(b,c){var d=a(c.draggable);if(d.data("_gridstack_node")){d.unbind("drag",p);var e=d.data("_gridstack_node");e.el=null,j.grid.removeNode(e),j.placeholder.detach(),j._updateContainerHeight(),d.data("_gridstack_node",d.data("_gridstack_node_orig"))}}).on(j.container,"drop",function(b,c){j.placeholder.detach();var d=a(c.draggable).data("_gridstack_node");d._grid=j;var e=a(c.draggable).clone(!1);e.data("_gridstack_node",d);var f=a(c.draggable).data("_gridstack_node_orig");void 0!==f&&void 0!==f._grid&&f._grid._triggerRemoveEvent(),a(c.helper).remove(),d.el=e,j.placeholder.hide(),e.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).addClass(j.opts.itemClass).removeAttr("style").enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),j.container.append(e),j._prepareElementsByNode(e,d),j._updateContainerHeight(),j.grid._addedNodes.push(d),j._triggerAddEvent(),j._triggerChangeEvent(),j.grid.endUpdate(),a(c.draggable).unbind("drag",p),a(c.draggable).removeData("_gridstack_node"),a(c.draggable).removeData("_gridstack_node_orig")})}};return j.prototype._triggerChangeEvent=function(a){var b=this.grid.getDirtyNodes(),c=!1,d=[];b&&b.length&&(d.push(b),c=!0),(c||!0===a)&&this.container.trigger("change",d)},j.prototype._triggerAddEvent=function(){this.grid._addedNodes&&this.grid._addedNodes.length>0&&(this.container.trigger("added",[b.map(this.grid._addedNodes,b.clone)]),this.grid._addedNodes=[])},j.prototype._triggerRemoveEvent=function(){this.grid._removedNodes&&this.grid._removedNodes.length>0&&(this.container.trigger("removed",[b.map(this.grid._removedNodes,b.clone)]),this.grid._removedNodes=[])},j.prototype._initStyles=function(){this._stylesId&&g.removeStylesheet(this._stylesId),this._stylesId="gridstack-style-"+(1e5*Math.random()).toFixed(),this._styles=g.createStylesheet(this._stylesId),null!==this._styles&&(this._styles._max=0)},j.prototype._updateStyles=function(a){if(null!==this._styles&&void 0!==this._styles){var b,c="."+this.opts._class+" ."+this.opts.itemClass,d=this;if(void 0===a&&(a=this._styles._max),this._initStyles(),this._updateContainerHeight(),this.opts.cellHeight&&!(0!==this._styles._max&&a<=this._styles._max)&&(b=this.opts.verticalMargin&&this.opts.cellHeightUnit!==this.opts.verticalMarginUnit?function(a,b){return a&&b?"calc("+(d.opts.cellHeight*a+d.opts.cellHeightUnit)+" + "+(d.opts.verticalMargin*b+d.opts.verticalMarginUnit)+")":d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit}:function(a,b){return d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit},0===this._styles._max&&g.insertCSSRule(this._styles,c,"min-height: "+b(1,0)+";",0),a>this._styles._max)){for(var e=this._styles._max;e=f.grid.width||k<0||!f.grid.float&&k>f.grid.getGridHeight()?c._temporaryRemoved||(!0===f.opts.removable&&f._setupRemovingTimeout(b),j=c._beforeDragX,k=c._beforeDragY,f.placeholder.detach(),f.placeholder.hide(),f.grid.removeNode(c),f._updateContainerHeight(),c._temporaryRemoved=!0):(f._clearRemovingTimeout(b),c._temporaryRemoved&&(f.grid.addNode(c),f.placeholder.attr("data-gs-x",j).attr("data-gs-y",k).attr("data-gs-width",h).attr("data-gs-height",i).show(),f.container.append(f.placeholder),c.el=f.placeholder,c._temporaryRemoved=!1));else if("resize"==a.type&&j<0)return;var l=void 0!==h?h:c.lastTriedWidth,m=void 0!==i?i:c.lastTriedHeight;!f.grid.canMoveNode(c,j,k,h,i)||c.lastTriedX===j&&c.lastTriedY===k&&c.lastTriedWidth===l&&c.lastTriedHeight===m||(c.lastTriedX=j,c.lastTriedY=k,c.lastTriedWidth=h,c.lastTriedHeight=i,f.grid.moveNode(c,j,k,h,i),f._updateContainerHeight())},h=function(g,h){f.container.append(f.placeholder);var i=a(this);f.grid.cleanNodes(),f.grid.beginUpdate(c),d=f.cellWidth();var j=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));e=f.container.height()/parseInt(f.container.attr("data-gs-current-height")),f.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),c.el=f.placeholder,c._beforeDragX=c.x,c._beforeDragY=c.y,f.dd.resizable(b,"option","minWidth",d*(c.minWidth||1)),f.dd.resizable(b,"option","minHeight",j*(c.minHeight||1)),"resizestart"==g.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(d,e){var g=a(this);if(g.data("_gridstack_node")){var h=!1;if(f.placeholder.detach(),c.el=g,f.placeholder.hide(),c._isAboutToRemove){h=!0;b.data("_gridstack_node")._grid._triggerRemoveEvent(),b.removeData("_gridstack_node"),b.remove()}else f._clearRemovingTimeout(b),c._temporaryRemoved?(g.attr("data-gs-x",c._beforeDragX).attr("data-gs-y",c._beforeDragY).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style"),c.x=c._beforeDragX,c.y=c._beforeDragY,f.grid.addNode(c)):g.attr("data-gs-x",c.x).attr("data-gs-y",c.y).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style");f._updateContainerHeight(),f._triggerChangeEvent(h),f.grid.endUpdate();var i=g.find(".grid-stack");i.length&&"resizestop"==d.type&&(i.each(function(b,c){a(c).data("gridstack").onResizeHandler()}),g.find(".grid-stack-item").trigger("resizestop"),g.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==d.type&&f.container.trigger("gsresizestop",g)}};this.dd.draggable(b,{start:h,stop:i,drag:g}).resizable(b,{start:h,stop:i,resize:g}),(c.noMove||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableDrag)&&this.dd.draggable(b,"disable"),(c.noResize||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableResize)&&this.dd.resizable(b,"disable"),b.attr("data-gs-locked",c.locked?"yes":null)},j.prototype._prepareElement=function(b,c){c=void 0!==c&&c;var d=this;b=a(b),b.addClass(this.opts.itemClass);var e=d.grid.addNode({x:b.attr("data-gs-x"),y:b.attr("data-gs-y"),width:b.attr("data-gs-width"),height:b.attr("data-gs-height"),maxWidth:b.attr("data-gs-max-width"),minWidth:b.attr("data-gs-min-width"),maxHeight:b.attr("data-gs-max-height"),minHeight:b.attr("data-gs-min-height"),autoPosition:g.toBool(b.attr("data-gs-auto-position")),noResize:g.toBool(b.attr("data-gs-no-resize")),noMove:g.toBool(b.attr("data-gs-no-move")),locked:g.toBool(b.attr("data-gs-locked")),resizeHandles:b.attr("data-gs-resize-handles"),el:b,id:b.attr("data-gs-id"),_grid:d},c);b.data("_gridstack_node",e),this._prepareElementsByNode(b,e)},j.prototype.setAnimation=function(a){a?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},j.prototype.addWidget=function(b,c,d,e,f,g,h,i,j,k,l){return b=a(b),void 0!==c&&b.attr("data-gs-x",c),void 0!==d&&b.attr("data-gs-y",d),void 0!==e&&b.attr("data-gs-width",e),void 0!==f&&b.attr("data-gs-height",f),void 0!==g&&b.attr("data-gs-auto-position",g?"yes":null),void 0!==h&&b.attr("data-gs-min-width",h),void 0!==i&&b.attr("data-gs-max-width",i),void 0!==j&&b.attr("data-gs-min-height",j),void 0!==k&&b.attr("data-gs-max-height",k),void 0!==l&&b.attr("data-gs-id",l),this.container.append(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},j.prototype.makeWidget=function(b){return b=a(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},j.prototype.willItFit=function(a,b,c,d,e){var f={x:a,y:b,width:c,height:d,autoPosition:e};return this.grid.canBePlacedWithRespectToHeight(f)},j.prototype.removeWidget=function(b,c){c=void 0===c||c,b=a(b);var d=b.data("_gridstack_node");d||(d=this.grid.getNodeDataByDOMEl(b)),this.grid.removeNode(d,c),b.removeData("_gridstack_node"),this._updateContainerHeight(),c&&b.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},j.prototype.removeAll=function(a){b.each(this.grid.nodes,b.bind(function(b){this.removeWidget(b.el,a)},this)),this.grid.nodes=[],this._updateContainerHeight()},j.prototype.destroy=function(b){a(window).off("resize",this.onResizeHandler),this.disable(),void 0===b||b?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),g.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},j.prototype.resizable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noResize=!c,f.noResize||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?d.dd.resizable(e,"disable"):d.dd.resizable(e,"enable"))}),this},j.prototype.movable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noMove=!c,f.noMove||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?(d.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(d.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},j.prototype.enableMove=function(a,b){this.movable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableDrag=!a)},j.prototype.enableResize=function(a,b){this.resizable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableResize=!a)},j.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},j.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},j.prototype.locked=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(e.locked=c||!1,d.attr("data-gs-locked",e.locked?"yes":null))}),this},j.prototype.maxHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxHeight=c||!1,d.attr("data-gs-max-height",c)))}),this},j.prototype.minHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minHeight=c||!1,d.attr("data-gs-min-height",c)))}),this},j.prototype.maxWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxWidth=c||!1,d.attr("data-gs-max-width",c)))}),this},j.prototype.minWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minWidth=c||!1,d.attr("data-gs-min-width",c)))}),this},j.prototype._updateElement=function(b,c){b=a(b).first();var d=b.data("_gridstack_node");if(void 0!==d&&null!==d){var e=this;e.grid.cleanNodes(),e.grid.beginUpdate(d),c.call(this,b,d),e._updateContainerHeight(),e._triggerChangeEvent(),e.grid.endUpdate()}},j.prototype.resize=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.width,c=null!==c&&void 0!==c?c:d.height,this.grid.moveNode(d,d.x,d.y,b,c)})},j.prototype.move=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.x,c=null!==c&&void 0!==c?c:d.y,this.grid.moveNode(d,b,c,d.width,d.height)})},j.prototype.update=function(a,b,c,d,e){this._updateElement(a,function(a,f){b=null!==b&&void 0!==b?b:f.x,c=null!==c&&void 0!==c?c:f.y,d=null!==d&&void 0!==d?d:f.width,e=null!==e&&void 0!==e?e:f.height,this.grid.moveNode(f,b,c,d,e)})},j.prototype.verticalMargin=function(a,b){if(void 0===a)return this.opts.verticalMargin;var c=g.parseHeight(a);this.opts.verticalMarginUnit===c.unit&&this.opts.height===c.height||(this.opts.verticalMarginUnit=c.unit,this.opts.verticalMargin=c.height,b||this._updateStyles())},j.prototype.cellHeight=function(a,b){if(void 0===a){if(this.opts.cellHeight)return this.opts.cellHeight;var c=this.container.children("."+this.opts.itemClass).first();return Math.ceil(c.outerHeight()/c.attr("data-gs-height"))}var d=g.parseHeight(a);this.opts.cellHeightUnit===d.heightUnit&&this.opts.height===d.height||(this.opts.cellHeightUnit=d.unit,this.opts.cellHeight=d.height,b||this._updateStyles())},j.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},j.prototype.getCellFromPixel=function(a,b){var c=void 0!==b&&b?this.container.offset():this.container.position(),d=a.left-c.left,e=a.top-c.top,f=Math.floor(this.container.width()/this.opts.width),g=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(d/f),y:Math.floor(e/g)}},j.prototype.batchUpdate=function(){this.grid.batchUpdate()},j.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},j.prototype.isAreaEmpty=function(a,b,c,d){return this.grid.isAreaEmpty(a,b,c,d)},j.prototype.setStatic=function(a){this.opts.staticGrid=!0===a,this.enableMove(!a),this.enableResize(!a),this._setStaticClass()},j.prototype._setStaticClass=function(){!0===this.opts.staticGrid?this.container.addClass("grid-stack-static"):this.container.removeClass("grid-stack-static")},j.prototype._updateNodeWidths=function(a,b){this.grid._sortNodes(),this.grid.batchUpdate();for(var c={},d=0;de?1:-1})},defaults:function(a){return Array.prototype.slice.call(arguments,1).forEach(function(b){for(var c in b)b.hasOwnProperty(c)&&!a.hasOwnProperty(c)&&(a[c]=b[c])}),a},clone:function(b){return a.extend({},b)},throttle:function(a,b){var c=!1;return function(){c||(a.apply(this,arguments),c=!0,setTimeout(function(){c=!1},b))}}};f.is_intercepted=d(f.isIntercepted,"is_intercepted","isIntercepted"),f.create_stylesheet=d(f.createStylesheet,"create_stylesheet","createStylesheet"),f.remove_stylesheet=d(f.removeStylesheet,"remove_stylesheet","removeStylesheet"),f.insert_css_rule=d(f.insertCSSRule,"insert_css_rule","insertCSSRule"),b.registeredPlugins=[],b.registerPlugin=function(a){b.registeredPlugins.push(a)},b.prototype.resizable=function(a,b){return this},b.prototype.draggable=function(a,b){return this},b.prototype.droppable=function(a,b){return this},b.prototype.isDroppable=function(a){return!1},b.prototype.on=function(a,b,c){return this};var g=0,h=function(a,b,c,d,e){this.width=a,this.float=c||!1,this.height=d||0,this.nodes=e||[],this.onchange=b||function(){},this._updateCounter=0,this._float=this.float,this._addedNodes=[],this._removedNodes=[]};h.prototype.batchUpdate=function(){this._updateCounter=1,this.float=!0},h.prototype.commit=function(){0!==this._updateCounter&&(this._updateCounter=0,this.float=this._float,this._packNodes(),this._notify())},h.prototype.getNodeDataByDOMEl=function(a){return this.nodes.find(function(b){return a.get(0)===b.el.get(0)})},h.prototype._fixCollisions=function(a){this._sortNodes(-1);var b=a,c=Boolean(this.nodes.find(function(a){return a.locked}));for(this.float||c||(b={x:0,y:a.y,width:this.width,height:a.height});;){var d=this.nodes.find(f._collisionNodeCheck,{node:a,nn:b});if(void 0===d)return;this.moveNode(d,d.x,a.y+a.height,d.width,d.height,!0)}},h.prototype.isAreaEmpty=function(a,b,c,d){var e={x:a||0,y:b||0,width:c||1,height:d||1},g=this.nodes.find(function(a){return f.isIntercepted(a,e)});return null===g||void 0===g},h.prototype._sortNodes=function(a){this.nodes=f.sort(this.nodes,a,this.width)},h.prototype._packNodes=function(){this._sortNodes(),this.float?this.nodes.forEach(function(a,b){if(!a._updating&&void 0!==a._origY&&a.y!=a._origY)for(var c=a.y;c>=a._origY;){var d=this.nodes.find(f._didCollide,{n:a,newY:c});d||(a._dirty=!0,a.y=c),--c}},this):this.nodes.forEach(function(a,b){if(!a.locked)for(;a.y>0;){var c=a.y-1,d=0===b;if(b>0){var e=this.nodes.slice(0,b).find(f._didCollide,{n:a,newY:c});d=void 0===e}if(!d)break;a._dirty=a.y!=c,a.y=c}},this)},h.prototype._prepareNode=function(a,b){return a=f.defaults(a||{},{width:1,height:1,x:0,y:0}),a.x=parseInt(""+a.x),a.y=parseInt(""+a.y),a.width=parseInt(""+a.width),a.height=parseInt(""+a.height),a.autoPosition=a.autoPosition||!1,a.noResize=a.noResize||!1,a.noMove=a.noMove||!1,a.width>this.width?a.width=this.width:a.width<1&&(a.width=1),a.height<1&&(a.height=1),a.x<0&&(a.x=0),a.x+a.width>this.width&&(b?a.width=this.width-a.x:a.x=this.width-a.width),a.y<0&&(a.y=0),a},h.prototype._notify=function(){var a=Array.prototype.slice.call(arguments,0);if(a[0]=void 0===a[0]?[]:[a[0]],a[1]=void 0===a[1]||a[1],!this._updateCounter){var b=a[0].concat(this.getDirtyNodes());this.onchange(b,a[1])}},h.prototype.cleanNodes=function(){this._updateCounter||this.nodes.forEach(function(a){a._dirty=!1})},h.prototype.getDirtyNodes=function(){return this.nodes.filter(function(a){return a._dirty})},h.prototype.addNode=function(a,b){if(a=this._prepareNode(a),void 0!==a.maxWidth&&(a.width=Math.min(a.width,a.maxWidth)),void 0!==a.maxHeight&&(a.height=Math.min(a.height,a.maxHeight)),void 0!==a.minWidth&&(a.width=Math.max(a.width,a.minWidth)),void 0!==a.minHeight&&(a.height=Math.max(a.height,a.minHeight)),a._id=++g,a._dirty=!0,a.autoPosition){this._sortNodes();for(var c=0;;++c){var d=c%this.width,e=Math.floor(c/this.width);if(!(d+a.width>this.width)&&!this.nodes.find(f._isAddNodeIntercepted,{x:d,y:e,node:a})){a.x=d,a.y=e;break}}}return this.nodes.push(a),void 0!==b&&b&&this._addedNodes.push(f.clone(a)),this._fixCollisions(a),this._packNodes(),this._notify(),a},h.prototype.removeNode=function(a,b){b=void 0===b||b,this._removedNodes.push(f.clone(a)),a._id=null,this.nodes=f.without(this.nodes,a),this._packNodes(),this._notify(a,b)},h.prototype.canMoveNode=function(b,c,d,e,f){if(!this.isNodeChangedPosition(b,c,d,e,f))return!1;var g=Boolean(this.nodes.find(function(a){return a.locked}));if(!this.height&&!g)return!0;var i,j=new h(this.width,null,this.float,0,this.nodes.map(function(c){return c==b?i=a.extend({},c):a.extend({},c)}));if(void 0===i)return!0;j.moveNode(i,c,d,e,f);var k=!0;return g&&(k&=!Boolean(j.nodes.find(function(a){return a!=i&&Boolean(a.locked)&&Boolean(a._dirty)}))),this.height&&(k&=j.getGridHeight()<=this.height),k},h.prototype.canBePlacedWithRespectToHeight=function(b){if(!this.height)return!0;var c=new h(this.width,null,this.float,0,this.nodes.map(function(b){return a.extend({},b)}));return c.addNode(b),c.getGridHeight()<=this.height},h.prototype.isNodeChangedPosition=function(a,b,c,d,e){return"number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x!=b||a.y!=c||a.width!=d||a.height!=e},h.prototype.moveNode=function(a,b,c,d,e,f){if(!this.isNodeChangedPosition(a,b,c,d,e))return a;if("number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x==b&&a.y==c&&a.width==d&&a.height==e)return a;var g=a.width!=d;return a._dirty=!0,a.x=b,a.y=c,a.width=d,a.height=e,a.lastTriedX=b,a.lastTriedY=c,a.lastTriedWidth=d,a.lastTriedHeight=e,a=this._prepareNode(a,g),this._fixCollisions(a),f||(this._packNodes(),this._notify()),a},h.prototype.getGridHeight=function(){return this.nodes.reduce(function(a,b){return Math.max(a,b.y+b.height)},0)},h.prototype.beginUpdate=function(a){this.nodes.forEach(function(a){a._origY=a.y}),a._updating=!0},h.prototype.endUpdate=function(){this.nodes.forEach(function(a){a._origY=a.y});var a=this.nodes.find(function(a){return a._updating});a&&(a._updating=!1)};var i=function(c,d){var g,i,j=this;d=d||{},this.container=a(c),void 0!==d.handle_class&&(d.handleClass=d.handle_class,e("handle_class","handleClass")),void 0!==d.item_class&&(d.itemClass=d.item_class,e("item_class","itemClass")),void 0!==d.placeholder_class&&(d.placeholderClass=d.placeholder_class,e("placeholder_class","placeholderClass")),void 0!==d.placeholder_text&&(d.placeholderText=d.placeholder_text,e("placeholder_text","placeholderText")),void 0!==d.cell_height&&(d.cellHeight=d.cell_height,e("cell_height","cellHeight")),void 0!==d.vertical_margin&&(d.verticalMargin=d.vertical_margin,e("vertical_margin","verticalMargin")),void 0!==d.min_width&&(d.minWidth=d.min_width,e("min_width","minWidth")),void 0!==d.static_grid&&(d.staticGrid=d.static_grid,e("static_grid","staticGrid")),void 0!==d.is_nested&&(d.isNested=d.is_nested,e("is_nested","isNested")),void 0!==d.always_show_resize_handle&&(d.alwaysShowResizeHandle=d.always_show_resize_handle,e("always_show_resize_handle","alwaysShowResizeHandle")),d.itemClass=d.itemClass||"grid-stack-item";var k=this.container.closest("."+d.itemClass).length>0;if(this.opts=f.defaults(d||{},{width:parseInt(this.container.attr("data-gs-width"))||12,height:parseInt(this.container.attr("data-gs-height"))||0,itemClass:"grid-stack-item",placeholderClass:"grid-stack-placeholder",placeholderText:"",handle:".grid-stack-item-content",handleClass:null,cellHeight:60,verticalMargin:20,auto:!0,minWidth:768,float:!1,staticGrid:!1,_class:"grid-stack-instance-"+(1e4*Math.random()).toFixed(0),animate:Boolean(this.container.attr("data-gs-animate"))||!1,alwaysShowResizeHandle:d.alwaysShowResizeHandle||!1,resizable:f.defaults(d.resizable||{},{autoHide:!d.alwaysShowResizeHandle,handles:"se"}),draggable:f.defaults(d.draggable||{},{handle:(d.handleClass?"."+d.handleClass:d.handle?d.handle:"")||".grid-stack-item-content",scroll:!1,appendTo:"body"}),disableDrag:d.disableDrag||!1,disableResize:d.disableResize||!1,rtl:"auto",removable:!1,removeTimeout:2e3,verticalMarginUnit:"px",cellHeightUnit:"px",disableOneColumnMode:d.disableOneColumnMode||!1,oneColumnModeClass:d.oneColumnModeClass||"grid-stack-one-column-mode",ddPlugin:null}),!1===this.opts.ddPlugin?this.opts.ddPlugin=b:null===this.opts.ddPlugin&&(this.opts.ddPlugin=b.registeredPlugins[0]||b),this.dd=new this.opts.ddPlugin(this),"auto"===this.opts.rtl&&(this.opts.rtl="rtl"===this.container.css("direction")),this.opts.rtl&&this.container.addClass("grid-stack-rtl"),this.opts.isNested=k,i="auto"===this.opts.cellHeight,i?j.cellHeight(j.cellWidth(),!0):this.cellHeight(this.opts.cellHeight,!0),this.verticalMargin(this.opts.verticalMargin,!0),this.container.addClass(this.opts._class),this._setStaticClass(),k&&this.container.addClass("grid-stack-nested"),this._initStyles(),this.grid=new h(this.opts.width,function(a,b){b=void 0===b||b;var c=0;a.forEach(function(a){b&&null===a._id?a.el&&a.el.remove():(a.el.attr("data-gs-x",a.x).attr("data-gs-y",a.y).attr("data-gs-width",a.width).attr("data-gs-height",a.height),c=Math.max(c,a.y+a.height))}),j._updateStyles(c+10)},this.opts.float,this.opts.height),this.opts.auto){var l=[],m=this;this.container.children("."+this.opts.itemClass+":not(."+this.opts.placeholderClass+")").each(function(b,c){c=a(c),l.push({el:c,i:parseInt(c.attr("data-gs-x"))+parseInt(c.attr("data-gs-y"))*m.opts.width})}),f.sortBy(l,function(a){return a.i}).forEach(function(a){this._prepareElement(a.el)},this)}if(this.setAnimation(this.opts.animate),this.placeholder=a('
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=f.throttle(function(){j.cellHeight(j.cellWidth(),!1)},100),this.onResizeHandler=function(){if(i&&j._updateHeightsOnResize(),j._isOneColumnMode()&&!j.opts.disableOneColumnMode){if(g)return;j.container.addClass(j.opts.oneColumnModeClass),g=!0,j.grid._sortNodes(),j.grid.nodes.forEach(function(a){j.container.append(a.el),j.opts.staticGrid||(j.dd.draggable(a.el,"disable"),j.dd.resizable(a.el,"disable"),a.el.trigger("resize"))})}else{if(!g)return;if(j.container.removeClass(j.opts.oneColumnModeClass),g=!1,j.opts.staticGrid)return;j.grid.nodes.forEach(function(a){a.noMove||j.opts.disableDrag||j.dd.draggable(a.el,"enable"),a.noResize||j.opts.disableResize||j.dd.resizable(a.el,"enable"),a.el.trigger("resize")})}},a(window).resize(this.onResizeHandler),this.onResizeHandler(),!j.opts.staticGrid&&"string"==typeof j.opts.removable){var n=a(j.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,{accept:"."+j.opts.itemClass}),this.dd.on(n,"dropover",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._setupRemovingTimeout(d)}).on(n,"dropout",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._clearRemovingTimeout(d)})}if(!j.opts.staticGrid&&j.opts.acceptWidgets){var o=null,p=function(a,b){var c=o,d=c.data("_gridstack_node"),e=j.getCellFromPixel(b.offset,!0),f=Math.max(0,e.x),g=Math.max(0,e.y);if(d._added){if(!j.grid.canMoveNode(d,f,g))return;j.grid.moveNode(d,f,g),j._updateContainerHeight()}else d._added=!0,d.el=c,d.x=f,d.y=g,j.grid.cleanNodes(),j.grid.beginUpdate(d),j.grid.addNode(d),j.container.append(j.placeholder),j.placeholder.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).show(),d.el=j.placeholder,d._beforeDragX=d.x,d._beforeDragY=d.y,j._updateContainerHeight()};this.dd.droppable(j.container,{accept:function(b){b=a(b);var c=b.data("_gridstack_node");return(!c||c._grid!==j)&&b.is(!0===j.opts.acceptWidgets?".grid-stack-item":j.opts.acceptWidgets)}}).on(j.container,"dropover",function(b,c){var d=(j.container.offset(),a(c.draggable)),e=j.cellWidth(),f=j.cellHeight(),g=d.data("_gridstack_node"),h=g?g.width:Math.ceil(d.outerWidth()/e),i=g?g.height:Math.ceil(d.outerHeight()/f);o=d;var k=j.grid._prepareNode({width:h,height:i,_added:!1,_temporary:!0});d.data("_gridstack_node",k),d.data("_gridstack_node_orig",g),d.on("drag",p)}).on(j.container,"dropout",function(b,c){var d=a(c.draggable);if(d.data("_gridstack_node")){d.unbind("drag",p);var e=d.data("_gridstack_node");e.el=null,j.grid.removeNode(e),j.placeholder.detach(),j._updateContainerHeight(),d.data("_gridstack_node",d.data("_gridstack_node_orig"))}}).on(j.container,"drop",function(b,c){j.placeholder.detach();var d=a(c.draggable).data("_gridstack_node");d._grid=j;var e=a(c.draggable).clone(!1);e.data("_gridstack_node",d);var f=a(c.draggable).data("_gridstack_node_orig");void 0!==f&&void 0!==f._grid&&f._grid._triggerRemoveEvent(),a(c.helper).remove(),d.el=e,j.placeholder.hide(),e.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).addClass(j.opts.itemClass).removeAttr("style").enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),j.container.append(e),j._prepareElementsByNode(e,d),j._updateContainerHeight(),j.grid._addedNodes.push(d),j._triggerAddEvent(),j._triggerChangeEvent(),j.grid.endUpdate(),a(c.draggable).unbind("drag",p),a(c.draggable).removeData("_gridstack_node"),a(c.draggable).removeData("_gridstack_node_orig")})}};return i.prototype._triggerChangeEvent=function(a){var b=this.grid.getDirtyNodes(),c=!1,d=[];b&&b.length&&(d.push(b),c=!0),(c||!0===a)&&this.container.trigger("change",d)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&this.grid._addedNodes.length>0&&(this.container.trigger("added",[this.grid._addedNodes.map(f.clone)]),this.grid._addedNodes=[])},i.prototype._triggerRemoveEvent=function(){this.grid._removedNodes&&this.grid._removedNodes.length>0&&(this.container.trigger("removed",[this.grid._removedNodes.map(f.clone)]),this.grid._removedNodes=[])},i.prototype._initStyles=function(){this._stylesId&&f.removeStylesheet(this._stylesId),this._stylesId="gridstack-style-"+(1e5*Math.random()).toFixed(),this._styles=f.createStylesheet(this._stylesId),null!==this._styles&&(this._styles._max=0)},i.prototype._updateStyles=function(a){if(null!==this._styles&&void 0!==this._styles){var b,c="."+this.opts._class+" ."+this.opts.itemClass,d=this;if(void 0===a&&(a=this._styles._max),this._initStyles(),this._updateContainerHeight(),this.opts.cellHeight&&!(0!==this._styles._max&&a<=this._styles._max)&&(b=this.opts.verticalMargin&&this.opts.cellHeightUnit!==this.opts.verticalMarginUnit?function(a,b){return a&&b?"calc("+(d.opts.cellHeight*a+d.opts.cellHeightUnit)+" + "+(d.opts.verticalMargin*b+d.opts.verticalMarginUnit)+")":d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit}:function(a,b){return d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit},0===this._styles._max&&f.insertCSSRule(this._styles,c,"min-height: "+b(1,0)+";",0),a>this._styles._max)){for(var e=this._styles._max;e=f.grid.width||k<0||!f.grid.float&&k>f.grid.getGridHeight()?c._temporaryRemoved||(!0===f.opts.removable&&f._setupRemovingTimeout(b),j=c._beforeDragX,k=c._beforeDragY,f.placeholder.detach(),f.placeholder.hide(),f.grid.removeNode(c),f._updateContainerHeight(),c._temporaryRemoved=!0):(f._clearRemovingTimeout(b),c._temporaryRemoved&&(f.grid.addNode(c),f.placeholder.attr("data-gs-x",j).attr("data-gs-y",k).attr("data-gs-width",h).attr("data-gs-height",i).show(),f.container.append(f.placeholder),c.el=f.placeholder,c._temporaryRemoved=!1));else if("resize"==a.type&&j<0)return;var l=void 0!==h?h:c.lastTriedWidth,m=void 0!==i?i:c.lastTriedHeight;!f.grid.canMoveNode(c,j,k,h,i)||c.lastTriedX===j&&c.lastTriedY===k&&c.lastTriedWidth===l&&c.lastTriedHeight===m||(c.lastTriedX=j,c.lastTriedY=k,c.lastTriedWidth=h,c.lastTriedHeight=i,f.grid.moveNode(c,j,k,h,i),f._updateContainerHeight())},h=function(g,h){f.container.append(f.placeholder);var i=a(this);f.grid.cleanNodes(),f.grid.beginUpdate(c),d=f.cellWidth();var j=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));e=f.container.height()/parseInt(f.container.attr("data-gs-current-height")),f.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),c.el=f.placeholder,c._beforeDragX=c.x,c._beforeDragY=c.y,f.dd.resizable(b,"option","minWidth",d*(c.minWidth||1)),f.dd.resizable(b,"option","minHeight",j*(c.minHeight||1)),"resizestart"==g.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(d,e){var g=a(this);if(g.data("_gridstack_node")){var h=!1;if(f.placeholder.detach(),c.el=g,f.placeholder.hide(),c._isAboutToRemove){h=!0;b.data("_gridstack_node")._grid._triggerRemoveEvent(),b.removeData("_gridstack_node"),b.remove()}else f._clearRemovingTimeout(b),c._temporaryRemoved?(g.attr("data-gs-x",c._beforeDragX).attr("data-gs-y",c._beforeDragY).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style"),c.x=c._beforeDragX,c.y=c._beforeDragY,f.grid.addNode(c)):g.attr("data-gs-x",c.x).attr("data-gs-y",c.y).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style");f._updateContainerHeight(),f._triggerChangeEvent(h),f.grid.endUpdate();var i=g.find(".grid-stack");i.length&&"resizestop"==d.type&&(i.each(function(b,c){a(c).data("gridstack").onResizeHandler()}),g.find(".grid-stack-item").trigger("resizestop"),g.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==d.type&&f.container.trigger("gsresizestop",g)}};this.dd.draggable(b,{start:h,stop:i,drag:g}).resizable(b,{start:h,stop:i,resize:g}),(c.noMove||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableDrag)&&this.dd.draggable(b,"disable"),(c.noResize||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableResize)&&this.dd.resizable(b,"disable"),b.attr("data-gs-locked",c.locked?"yes":null)},i.prototype._prepareElement=function(b,c){c=void 0!==c&&c;var d=this;b=a(b),b.addClass(this.opts.itemClass);var e=d.grid.addNode({x:b.attr("data-gs-x"),y:b.attr("data-gs-y"),width:b.attr("data-gs-width"),height:b.attr("data-gs-height"),maxWidth:b.attr("data-gs-max-width"),minWidth:b.attr("data-gs-min-width"),maxHeight:b.attr("data-gs-max-height"),minHeight:b.attr("data-gs-min-height"),autoPosition:f.toBool(b.attr("data-gs-auto-position")),noResize:f.toBool(b.attr("data-gs-no-resize")),noMove:f.toBool(b.attr("data-gs-no-move")),locked:f.toBool(b.attr("data-gs-locked")),resizeHandles:b.attr("data-gs-resize-handles"),el:b,id:b.attr("data-gs-id"),_grid:d},c);b.data("_gridstack_node",e),this._prepareElementsByNode(b,e)},i.prototype.setAnimation=function(a){a?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(b,c,d,e,f,g,h,i,j,k,l){return b=a(b),void 0!==c&&b.attr("data-gs-x",c),void 0!==d&&b.attr("data-gs-y",d),void 0!==e&&b.attr("data-gs-width",e),void 0!==f&&b.attr("data-gs-height",f),void 0!==g&&b.attr("data-gs-auto-position",g?"yes":null),void 0!==h&&b.attr("data-gs-min-width",h),void 0!==i&&b.attr("data-gs-max-width",i),void 0!==j&&b.attr("data-gs-min-height",j),void 0!==k&&b.attr("data-gs-max-height",k),void 0!==l&&b.attr("data-gs-id",l),this.container.append(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},i.prototype.makeWidget=function(b){return b=a(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},i.prototype.willItFit=function(a,b,c,d,e){var f={x:a,y:b,width:c,height:d,autoPosition:e};return this.grid.canBePlacedWithRespectToHeight(f)},i.prototype.removeWidget=function(b,c){c=void 0===c||c,b=a(b);var d=b.data("_gridstack_node");d||(d=this.grid.getNodeDataByDOMEl(b)),this.grid.removeNode(d,c),b.removeData("_gridstack_node"),this._updateContainerHeight(),c&&b.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(a){this.grid.nodes.forEach(function(b){this.removeWidget(b.el,a)},this),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(b){a(window).off("resize",this.onResizeHandler),this.disable(),void 0===b||b?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),f.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noResize=!c,f.noResize||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?d.dd.resizable(e,"disable"):d.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noMove=!c,f.noMove||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?(d.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(d.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(a,b){this.movable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableDrag=!a)},i.prototype.enableResize=function(a,b){this.resizable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableResize=!a)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(e.locked=c||!1,d.attr("data-gs-locked",e.locked?"yes":null))}),this},i.prototype.maxHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxHeight=c||!1,d.attr("data-gs-max-height",c)))}),this},i.prototype.minHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minHeight=c||!1,d.attr("data-gs-min-height",c)))}),this},i.prototype.maxWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxWidth=c||!1,d.attr("data-gs-max-width",c)))}),this},i.prototype.minWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minWidth=c||!1,d.attr("data-gs-min-width",c)))}),this},i.prototype._updateElement=function(b,c){b=a(b).first();var d=b.data("_gridstack_node");if(void 0!==d&&null!==d){var e=this;e.grid.cleanNodes(),e.grid.beginUpdate(d),c.call(this,b,d),e._updateContainerHeight(),e._triggerChangeEvent(),e.grid.endUpdate()}},i.prototype.resize=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.width,c=null!==c&&void 0!==c?c:d.height,this.grid.moveNode(d,d.x,d.y,b,c)})},i.prototype.move=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.x,c=null!==c&&void 0!==c?c:d.y,this.grid.moveNode(d,b,c,d.width,d.height)})},i.prototype.update=function(a,b,c,d,e){this._updateElement(a,function(a,f){b=null!==b&&void 0!==b?b:f.x,c=null!==c&&void 0!==c?c:f.y,d=null!==d&&void 0!==d?d:f.width,e=null!==e&&void 0!==e?e:f.height,this.grid.moveNode(f,b,c,d,e)})},i.prototype.verticalMargin=function(a,b){if(void 0===a)return this.opts.verticalMargin;var c=f.parseHeight(a);this.opts.verticalMarginUnit===c.unit&&this.opts.height===c.height||(this.opts.verticalMarginUnit=c.unit,this.opts.verticalMargin=c.height,b||this._updateStyles())},i.prototype.cellHeight=function(a,b){if(void 0===a){if(this.opts.cellHeight)return this.opts.cellHeight;var c=this.container.children("."+this.opts.itemClass).first();return Math.ceil(c.outerHeight()/c.attr("data-gs-height"))}var d=f.parseHeight(a);this.opts.cellHeightUnit===d.heightUnit&&this.opts.height===d.height||(this.opts.cellHeightUnit=d.unit,this.opts.cellHeight=d.height,b||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(a,b){var c=void 0!==b&&b?this.container.offset():this.container.position(),d=a.left-c.left,e=a.top-c.top,f=Math.floor(this.container.width()/this.opts.width),g=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(d/f),y:Math.floor(e/g)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(a,b,c,d){return this.grid.isAreaEmpty(a,b,c,d)},i.prototype.setStatic=function(a){this.opts.staticGrid=!0===a,this.enableMove(!a),this.enableResize(!a),this._setStaticClass()},i.prototype._setStaticClass=function(){!0===this.opts.staticGrid?this.container.addClass("grid-stack-static"):this.container.removeClass("grid-stack-static")},i.prototype._updateNodeWidths=function(a,b){this.grid._sortNodes(),this.grid.batchUpdate();for(var c={},d=0;d valueRight ? 1 : -1; + }); + }, + + defaults: function(target) { + var sources = Array.prototype.slice.call(arguments, 1); + + sources.forEach(function(source) { + for (var prop in source) { + if (source.hasOwnProperty(prop) && !target.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + }); + + return target; + }, + + clone: function(target) { + return $.extend({}, target); + }, + + throttle: function(callback, delay) { + var isWaiting = false; + + return function() { + if (!isWaiting) { + callback.apply(this, arguments); + isWaiting = true; + setTimeout(function() { isWaiting = false; }, delay); + } + }; } }; @@ -187,7 +245,7 @@ // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return _.find(this.nodes, function(n) { return el.get(0) === n.el.get(0); }); + return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); }; GridStackEngine.prototype._fixCollisions = function(node) { @@ -195,12 +253,12 @@ this._sortNodes(-1); var nn = node; - var hasLocked = Boolean(_.find(this.nodes, function(n) { return n.locked; })); + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); if (!this.float && !hasLocked) { nn = {x: 0, y: node.y, width: this.width, height: node.height}; } while (true) { - var collisionNode = _.find(this.nodes, _.bind(Utils._collisionNodeCheck, {node: node, nn: nn})); + var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); if (typeof collisionNode == 'undefined') { return; } @@ -211,9 +269,9 @@ GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; - var collisionNode = _.find(this.nodes, _.bind(function(n) { + var collisionNode = this.nodes.find(function(n) { return Utils.isIntercepted(n, nn); - }, this)); + }); return collisionNode === null || typeof collisionNode === 'undefined'; }; @@ -225,16 +283,14 @@ this._sortNodes(); if (this.float) { - _.each(this.nodes, _.bind(function(n, i) { + this.nodes.forEach(function(n, i) { if (n._updating || typeof n._origY == 'undefined' || n.y == n._origY) { return; } var newY = n.y; while (newY >= n._origY) { - var collisionNode = _.chain(this.nodes) - .find(_.bind(Utils._didCollide, {n: n, newY: newY})) - .value(); + var collisionNode = this.nodes.find(Utils._didCollide, {n: n, newY: newY}); if (!collisionNode) { n._dirty = true; @@ -242,9 +298,9 @@ } --newY; } - }, this)); + }, this); } else { - _.each(this.nodes, _.bind(function(n, i) { + this.nodes.forEach(function(n, i) { if (n.locked) { return; } @@ -253,10 +309,9 @@ var canBeMoved = i === 0; if (i > 0) { - var collisionNode = _.chain(this.nodes) - .take(i) - .find(_.bind(Utils._didCollide, {n: n, newY: newY})) - .value(); + var collisionNode = this.nodes + .slice(0, i) + .find(Utils._didCollide, {n: n, newY: newY}); canBeMoved = typeof collisionNode == 'undefined'; } @@ -266,12 +321,12 @@ n._dirty = n.y != newY; n.y = newY; } - }, this)); + }, this); } }; GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = _.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); + node = Utils.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); node.x = parseInt('' + node.x); node.y = parseInt('' + node.y); @@ -325,11 +380,11 @@ if (this._updateCounter) { return; } - _.each(this.nodes, function(n) {n._dirty = false; }); + this.nodes.forEach(function(n) { n._dirty = false; }); }; GridStackEngine.prototype.getDirtyNodes = function() { - return _.filter(this.nodes, function(n) { return n._dirty; }); + return this.nodes.filter(function(n) { return n._dirty; }); }; GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { @@ -352,7 +407,7 @@ if (x + node.width > this.width) { continue; } - if (!_.find(this.nodes, _.bind(Utils._isAddNodeIntercepted, {x: x, y: y, node: node}))) { + if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { node.x = x; node.y = y; break; @@ -362,7 +417,7 @@ this.nodes.push(node); if (typeof triggerAddEvent != 'undefined' && triggerAddEvent) { - this._addedNodes.push(_.clone(node)); + this._addedNodes.push(Utils.clone(node)); } this._fixCollisions(node); @@ -373,9 +428,9 @@ GridStackEngine.prototype.removeNode = function(node, detachNode) { detachNode = typeof detachNode === 'undefined' ? true : detachNode; - this._removedNodes.push(_.clone(node)); + this._removedNodes.push(Utils.clone(node)); node._id = null; - this.nodes = _.without(this.nodes, node); + this.nodes = Utils.without(this.nodes, node); this._packNodes(); this._notify(node, detachNode); }; @@ -384,7 +439,7 @@ if (!this.isNodeChangedPosition(node, x, y, width, height)) { return false; } - var hasLocked = Boolean(_.find(this.nodes, function(n) { return n.locked; })); + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); if (!this.height && !hasLocked) { return true; @@ -396,7 +451,7 @@ null, this.float, 0, - _.map(this.nodes, function(n) { + this.nodes.map(function(n) { if (n == node) { clonedNode = $.extend({}, n); return clonedNode; @@ -413,7 +468,7 @@ var res = true; if (hasLocked) { - res &= !Boolean(_.find(clone.nodes, function(n) { + res &= !Boolean(clone.nodes.find(function(n) { return n != clonedNode && Boolean(n.locked) && Boolean(n._dirty); })); } @@ -434,7 +489,7 @@ null, this.float, 0, - _.map(this.nodes, function(n) { return $.extend({}, n); })); + this.nodes.map(function(n) { return $.extend({}, n); })); clone.addNode(node); return clone.getGridHeight() <= this.height; }; @@ -498,21 +553,21 @@ }; GridStackEngine.prototype.getGridHeight = function() { - return _.reduce(this.nodes, function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); + return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); }; GridStackEngine.prototype.beginUpdate = function(node) { - _.each(this.nodes, function(n) { + this.nodes.forEach(function(n) { n._origY = n.y; }); node._updating = true; }; GridStackEngine.prototype.endUpdate = function() { - _.each(this.nodes, function(n) { + this.nodes.forEach(function(n) { n._origY = n.y; }); - var n = _.find(this.nodes, function(n) { return n._updating; }); + var n = this.nodes.find(function(n) { return n._updating; }); if (n) { n._updating = false; } @@ -572,7 +627,7 @@ opts.itemClass = opts.itemClass || 'grid-stack-item'; var isNested = this.container.closest('.' + opts.itemClass).length > 0; - this.opts = _.defaults(opts || {}, { + this.opts = Utils.defaults(opts || {}, { width: parseInt(this.container.attr('data-gs-width')) || 12, height: parseInt(this.container.attr('data-gs-height')) || 0, itemClass: 'grid-stack-item', @@ -589,11 +644,11 @@ _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), animate: Boolean(this.container.attr('data-gs-animate')) || false, alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: _.defaults(opts.resizable || {}, { + resizable: Utils.defaults(opts.resizable || {}, { autoHide: !(opts.alwaysShowResizeHandle || false), handles: 'se' }), - draggable: _.defaults(opts.draggable || {}, { + draggable: Utils.defaults(opts.draggable || {}, { handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || '.grid-stack-item-content', scroll: false, @@ -614,7 +669,7 @@ if (this.opts.ddPlugin === false) { this.opts.ddPlugin = GridStackDragDropPlugin; } else if (this.opts.ddPlugin === null) { - this.opts.ddPlugin = _.first(GridStackDragDropPlugin.registeredPlugins) || GridStackDragDropPlugin; + this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; } this.dd = new this.opts.ddPlugin(this); @@ -650,7 +705,7 @@ this.grid = new GridStackEngine(this.opts.width, function(nodes, detachNode) { detachNode = typeof detachNode === 'undefined' ? true : detachNode; var maxHeight = 0; - _.each(nodes, function(n) { + nodes.forEach(function(n) { if (detachNode && n._id === null) { if (n.el) { n.el.remove(); @@ -678,9 +733,9 @@ i: parseInt(el.attr('data-gs-x')) + parseInt(el.attr('data-gs-y')) * _this.opts.width }); }); - _.chain(elements).sortBy(function(x) { return x.i; }).each(function(i) { - self._prepareElement(i.el); - }).value(); + Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(i) { + this._prepareElement(i.el); + }, this); } this.setAnimation(this.opts.animate); @@ -691,7 +746,7 @@ this._updateContainerHeight(); - this._updateHeightsOnResize = _.throttle(function() { + this._updateHeightsOnResize = Utils.throttle(function() { self.cellHeight(self.cellWidth(), false); }, 100); @@ -708,7 +763,7 @@ oneColumnMode = true; self.grid._sortNodes(); - _.each(self.grid.nodes, function(node) { + self.grid.nodes.forEach(function(node) { self.container.append(node.el); if (self.opts.staticGrid) { @@ -731,7 +786,7 @@ return; } - _.each(self.grid.nodes, function(node) { + self.grid.nodes.forEach(function(node) { if (!node.noMove && !self.opts.disableDrag) { self.dd.draggable(node.el, 'enable'); } @@ -912,14 +967,14 @@ GridStack.prototype._triggerAddEvent = function() { if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { - this.container.trigger('added', [_.map(this.grid._addedNodes, _.clone)]); + this.container.trigger('added', [this.grid._addedNodes.map(Utils.clone)]); this.grid._addedNodes = []; } }; GridStack.prototype._triggerRemoveEvent = function() { if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { - this.container.trigger('removed', [_.map(this.grid._removedNodes, _.clone)]); + this.container.trigger('removed', [this.grid._removedNodes.map(Utils.clone)]); this.grid._removedNodes = []; } }; @@ -1324,9 +1379,9 @@ }; GridStack.prototype.removeAll = function(detachNode) { - _.each(this.grid.nodes, _.bind(function(node) { + this.grid.nodes.forEach(function(node) { this.removeWidget(node.el, detachNode); - }, this)); + }, this); this.grid.nodes = []; this._updateContainerHeight(); }; diff --git a/dist/gridstack.min.js b/dist/gridstack.min.js index a38f653df..d97d1b723 100644 --- a/dist/gridstack.min.js +++ b/dist/gridstack.min.js @@ -5,6 +5,6 @@ * gridstack.js may be freely distributed under the MIT license. * @preserve */ -!function(a){if("function"==typeof define&&define.amd)define(["jquery","lodash"],a);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(a){}try{_=require("lodash")}catch(a){}a(jQuery,_)}else a(jQuery,_)}(function(a,b){function c(a){this.grid=a}var d=window,e=function(a,b,c){var d=function(){return console.warn("gridstack.js: Function `"+b+"` is deprecated as of v0.2.5 and has been replaced with `"+c+"`. It will be **completely** removed in v1.0."),a.apply(this,arguments)};return d.prototype=a.prototype,d},f=function(a,b){console.warn("gridstack.js: Option `"+a+"` is deprecated as of v0.2.5 and has been replaced with `"+b+"`. It will be **completely** removed in v1.0.")},g={isIntercepted:function(a,b){return!(a.x+a.width<=b.x||b.x+b.width<=a.x||a.y+a.height<=b.y||b.y+b.height<=a.y)},sort:function(a,c,d){return d=d||b.chain(a).map(function(a){return a.x+a.width}).max().value(),c=-1!=c?1:-1,b.sortBy(a,function(a){return c*(a.x+a.y*d)})},createStylesheet:function(a){var b=document.createElement("style");return b.setAttribute("type","text/css"),b.setAttribute("data-gs-style-id",a),b.styleSheet?b.styleSheet.cssText="":b.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(b),b.sheet},removeStylesheet:function(b){a("STYLE[data-gs-style-id="+b+"]").remove()},insertCSSRule:function(a,b,c,d){"function"==typeof a.insertRule?a.insertRule(b+"{"+c+"}",d):"function"==typeof a.addRule&&a.addRule(b,c,d)},toBool:function(a){return"boolean"==typeof a?a:"string"==typeof a?!(""===(a=a.toLowerCase())||"no"==a||"false"==a||"0"==a):Boolean(a)},_collisionNodeCheck:function(a){return a!=this.node&&g.isIntercepted(a,this.nn)},_didCollide:function(a){return g.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},a)},_isAddNodeIntercepted:function(a){return g.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},a)},parseHeight:function(a){var c=a,d="px";if(c&&b.isString(c)){var e=c.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!e)throw new Error("Invalid height");d=e[2]||"px",c=parseFloat(e[1])}return{height:c,unit:d}}};g.is_intercepted=e(g.isIntercepted,"is_intercepted","isIntercepted"),g.create_stylesheet=e(g.createStylesheet,"create_stylesheet","createStylesheet"),g.remove_stylesheet=e(g.removeStylesheet,"remove_stylesheet","removeStylesheet"),g.insert_css_rule=e(g.insertCSSRule,"insert_css_rule","insertCSSRule"),c.registeredPlugins=[],c.registerPlugin=function(a){c.registeredPlugins.push(a)},c.prototype.resizable=function(a,b){return this},c.prototype.draggable=function(a,b){return this},c.prototype.droppable=function(a,b){return this},c.prototype.isDroppable=function(a){return!1},c.prototype.on=function(a,b,c){return this};var h=0,i=function(a,b,c,d,e){this.width=a,this.float=c||!1,this.height=d||0,this.nodes=e||[],this.onchange=b||function(){},this._updateCounter=0,this._float=this.float,this._addedNodes=[],this._removedNodes=[]};i.prototype.batchUpdate=function(){this._updateCounter=1,this.float=!0},i.prototype.commit=function(){0!==this._updateCounter&&(this._updateCounter=0,this.float=this._float,this._packNodes(),this._notify())},i.prototype.getNodeDataByDOMEl=function(a){return b.find(this.nodes,function(b){return a.get(0)===b.el.get(0)})},i.prototype._fixCollisions=function(a){this._sortNodes(-1);var c=a,d=Boolean(b.find(this.nodes,function(a){return a.locked}));for(this.float||d||(c={x:0,y:a.y,width:this.width,height:a.height});;){var e=b.find(this.nodes,b.bind(g._collisionNodeCheck,{node:a,nn:c}));if(void 0===e)return;this.moveNode(e,e.x,a.y+a.height,e.width,e.height,!0)}},i.prototype.isAreaEmpty=function(a,c,d,e){var f={x:a||0,y:c||0,width:d||1,height:e||1},h=b.find(this.nodes,b.bind(function(a){return g.isIntercepted(a,f)},this));return null===h||void 0===h},i.prototype._sortNodes=function(a){this.nodes=g.sort(this.nodes,a,this.width)},i.prototype._packNodes=function(){this._sortNodes(),this.float?b.each(this.nodes,b.bind(function(a,c){if(!a._updating&&void 0!==a._origY&&a.y!=a._origY)for(var d=a.y;d>=a._origY;){var e=b.chain(this.nodes).find(b.bind(g._didCollide,{n:a,newY:d})).value();e||(a._dirty=!0,a.y=d),--d}},this)):b.each(this.nodes,b.bind(function(a,c){if(!a.locked)for(;a.y>0;){var d=a.y-1,e=0===c;if(c>0){var f=b.chain(this.nodes).take(c).find(b.bind(g._didCollide,{n:a,newY:d})).value();e=void 0===f}if(!e)break;a._dirty=a.y!=d,a.y=d}},this))},i.prototype._prepareNode=function(a,c){return a=b.defaults(a||{},{width:1,height:1,x:0,y:0}),a.x=parseInt(""+a.x),a.y=parseInt(""+a.y),a.width=parseInt(""+a.width),a.height=parseInt(""+a.height),a.autoPosition=a.autoPosition||!1,a.noResize=a.noResize||!1,a.noMove=a.noMove||!1,a.width>this.width?a.width=this.width:a.width<1&&(a.width=1),a.height<1&&(a.height=1),a.x<0&&(a.x=0),a.x+a.width>this.width&&(c?a.width=this.width-a.x:a.x=this.width-a.width),a.y<0&&(a.y=0),a},i.prototype._notify=function(){var a=Array.prototype.slice.call(arguments,0);if(a[0]=void 0===a[0]?[]:[a[0]],a[1]=void 0===a[1]||a[1],!this._updateCounter){var b=a[0].concat(this.getDirtyNodes());this.onchange(b,a[1])}},i.prototype.cleanNodes=function(){this._updateCounter||b.each(this.nodes,function(a){a._dirty=!1})},i.prototype.getDirtyNodes=function(){return b.filter(this.nodes,function(a){return a._dirty})},i.prototype.addNode=function(a,c){if(a=this._prepareNode(a),void 0!==a.maxWidth&&(a.width=Math.min(a.width,a.maxWidth)),void 0!==a.maxHeight&&(a.height=Math.min(a.height,a.maxHeight)),void 0!==a.minWidth&&(a.width=Math.max(a.width,a.minWidth)),void 0!==a.minHeight&&(a.height=Math.max(a.height,a.minHeight)),a._id=++h,a._dirty=!0,a.autoPosition){this._sortNodes();for(var d=0;;++d){var e=d%this.width,f=Math.floor(d/this.width);if(!(e+a.width>this.width)&&!b.find(this.nodes,b.bind(g._isAddNodeIntercepted,{x:e,y:f,node:a}))){a.x=e,a.y=f;break}}}return this.nodes.push(a),void 0!==c&&c&&this._addedNodes.push(b.clone(a)),this._fixCollisions(a),this._packNodes(),this._notify(),a},i.prototype.removeNode=function(a,c){c=void 0===c||c,this._removedNodes.push(b.clone(a)),a._id=null,this.nodes=b.without(this.nodes,a),this._packNodes(),this._notify(a,c)},i.prototype.canMoveNode=function(c,d,e,f,g){if(!this.isNodeChangedPosition(c,d,e,f,g))return!1;var h=Boolean(b.find(this.nodes,function(a){return a.locked}));if(!this.height&&!h)return!0;var j,k=new i(this.width,null,this.float,0,b.map(this.nodes,function(b){return b==c?j=a.extend({},b):a.extend({},b)}));if(void 0===j)return!0;k.moveNode(j,d,e,f,g);var l=!0;return h&&(l&=!Boolean(b.find(k.nodes,function(a){return a!=j&&Boolean(a.locked)&&Boolean(a._dirty)}))),this.height&&(l&=k.getGridHeight()<=this.height),l},i.prototype.canBePlacedWithRespectToHeight=function(c){if(!this.height)return!0;var d=new i(this.width,null,this.float,0,b.map(this.nodes,function(b){return a.extend({},b)}));return d.addNode(c),d.getGridHeight()<=this.height},i.prototype.isNodeChangedPosition=function(a,b,c,d,e){return"number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x!=b||a.y!=c||a.width!=d||a.height!=e},i.prototype.moveNode=function(a,b,c,d,e,f){if(!this.isNodeChangedPosition(a,b,c,d,e))return a;if("number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x==b&&a.y==c&&a.width==d&&a.height==e)return a;var g=a.width!=d;return a._dirty=!0,a.x=b,a.y=c,a.width=d,a.height=e,a.lastTriedX=b,a.lastTriedY=c,a.lastTriedWidth=d,a.lastTriedHeight=e,a=this._prepareNode(a,g),this._fixCollisions(a),f||(this._packNodes(),this._notify()),a},i.prototype.getGridHeight=function(){return b.reduce(this.nodes,function(a,b){return Math.max(a,b.y+b.height)},0)},i.prototype.beginUpdate=function(a){b.each(this.nodes,function(a){a._origY=a.y}),a._updating=!0},i.prototype.endUpdate=function(){b.each(this.nodes,function(a){a._origY=a.y});var a=b.find(this.nodes,function(a){return a._updating});a&&(a._updating=!1)};var j=function(d,e){var g,h,j=this;e=e||{},this.container=a(d),void 0!==e.handle_class&&(e.handleClass=e.handle_class,f("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,f("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,f("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,f("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,f("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,f("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,f("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,f("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,f("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,f("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var k=this.container.closest("."+e.itemClass).length>0;if(this.opts=b.defaults(e||{},{width:parseInt(this.container.attr("data-gs-width"))||12,height:parseInt(this.container.attr("data-gs-height"))||0,itemClass:"grid-stack-item",placeholderClass:"grid-stack-placeholder",placeholderText:"",handle:".grid-stack-item-content",handleClass:null,cellHeight:60,verticalMargin:20,auto:!0,minWidth:768,float:!1,staticGrid:!1,_class:"grid-stack-instance-"+(1e4*Math.random()).toFixed(0),animate:Boolean(this.container.attr("data-gs-animate"))||!1,alwaysShowResizeHandle:e.alwaysShowResizeHandle||!1,resizable:b.defaults(e.resizable||{},{autoHide:!e.alwaysShowResizeHandle,handles:"se"}),draggable:b.defaults(e.draggable||{},{handle:(e.handleClass?"."+e.handleClass:e.handle?e.handle:"")||".grid-stack-item-content",scroll:!1,appendTo:"body"}),disableDrag:e.disableDrag||!1,disableResize:e.disableResize||!1,rtl:"auto",removable:!1,removeTimeout:2e3,verticalMarginUnit:"px",cellHeightUnit:"px",disableOneColumnMode:e.disableOneColumnMode||!1,oneColumnModeClass:e.oneColumnModeClass||"grid-stack-one-column-mode",ddPlugin:null}),!1===this.opts.ddPlugin?this.opts.ddPlugin=c:null===this.opts.ddPlugin&&(this.opts.ddPlugin=b.first(c.registeredPlugins)||c),this.dd=new this.opts.ddPlugin(this),"auto"===this.opts.rtl&&(this.opts.rtl="rtl"===this.container.css("direction")),this.opts.rtl&&this.container.addClass("grid-stack-rtl"),this.opts.isNested=k,h="auto"===this.opts.cellHeight,h?j.cellHeight(j.cellWidth(),!0):this.cellHeight(this.opts.cellHeight,!0),this.verticalMargin(this.opts.verticalMargin,!0),this.container.addClass(this.opts._class),this._setStaticClass(),k&&this.container.addClass("grid-stack-nested"),this._initStyles(),this.grid=new i(this.opts.width,function(a,c){c=void 0===c||c;var d=0;b.each(a,function(a){c&&null===a._id?a.el&&a.el.remove():(a.el.attr("data-gs-x",a.x).attr("data-gs-y",a.y).attr("data-gs-width",a.width).attr("data-gs-height",a.height),d=Math.max(d,a.y+a.height))}),j._updateStyles(d+10)},this.opts.float,this.opts.height),this.opts.auto){var l=[],m=this;this.container.children("."+this.opts.itemClass+":not(."+this.opts.placeholderClass+")").each(function(b,c){c=a(c),l.push({el:c,i:parseInt(c.attr("data-gs-x"))+parseInt(c.attr("data-gs-y"))*m.opts.width})}),b.chain(l).sortBy(function(a){return a.i}).each(function(a){j._prepareElement(a.el)}).value()}if(this.setAnimation(this.opts.animate),this.placeholder=a('
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=b.throttle(function(){j.cellHeight(j.cellWidth(),!1)},100),this.onResizeHandler=function(){if(h&&j._updateHeightsOnResize(),j._isOneColumnMode()&&!j.opts.disableOneColumnMode){if(g)return;j.container.addClass(j.opts.oneColumnModeClass),g=!0,j.grid._sortNodes(),b.each(j.grid.nodes,function(a){j.container.append(a.el),j.opts.staticGrid||(j.dd.draggable(a.el,"disable"),j.dd.resizable(a.el,"disable"),a.el.trigger("resize"))})}else{if(!g)return;if(j.container.removeClass(j.opts.oneColumnModeClass),g=!1,j.opts.staticGrid)return;b.each(j.grid.nodes,function(a){a.noMove||j.opts.disableDrag||j.dd.draggable(a.el,"enable"),a.noResize||j.opts.disableResize||j.dd.resizable(a.el,"enable"),a.el.trigger("resize")})}},a(window).resize(this.onResizeHandler),this.onResizeHandler(),!j.opts.staticGrid&&"string"==typeof j.opts.removable){var n=a(j.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,{accept:"."+j.opts.itemClass}),this.dd.on(n,"dropover",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._setupRemovingTimeout(d)}).on(n,"dropout",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._clearRemovingTimeout(d)})}if(!j.opts.staticGrid&&j.opts.acceptWidgets){var o=null,p=function(a,b){var c=o,d=c.data("_gridstack_node"),e=j.getCellFromPixel(b.offset,!0),f=Math.max(0,e.x),g=Math.max(0,e.y);if(d._added){if(!j.grid.canMoveNode(d,f,g))return;j.grid.moveNode(d,f,g),j._updateContainerHeight()}else d._added=!0,d.el=c,d.x=f,d.y=g,j.grid.cleanNodes(),j.grid.beginUpdate(d),j.grid.addNode(d),j.container.append(j.placeholder),j.placeholder.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).show(),d.el=j.placeholder,d._beforeDragX=d.x,d._beforeDragY=d.y,j._updateContainerHeight()};this.dd.droppable(j.container,{accept:function(b){b=a(b);var c=b.data("_gridstack_node");return(!c||c._grid!==j)&&b.is(!0===j.opts.acceptWidgets?".grid-stack-item":j.opts.acceptWidgets)}}).on(j.container,"dropover",function(b,c){var d=(j.container.offset(),a(c.draggable)),e=j.cellWidth(),f=j.cellHeight(),g=d.data("_gridstack_node"),h=g?g.width:Math.ceil(d.outerWidth()/e),i=g?g.height:Math.ceil(d.outerHeight()/f);o=d;var k=j.grid._prepareNode({width:h,height:i,_added:!1,_temporary:!0});d.data("_gridstack_node",k),d.data("_gridstack_node_orig",g),d.on("drag",p)}).on(j.container,"dropout",function(b,c){var d=a(c.draggable);if(d.data("_gridstack_node")){d.unbind("drag",p);var e=d.data("_gridstack_node");e.el=null,j.grid.removeNode(e),j.placeholder.detach(),j._updateContainerHeight(),d.data("_gridstack_node",d.data("_gridstack_node_orig"))}}).on(j.container,"drop",function(b,c){j.placeholder.detach();var d=a(c.draggable).data("_gridstack_node");d._grid=j;var e=a(c.draggable).clone(!1);e.data("_gridstack_node",d);var f=a(c.draggable).data("_gridstack_node_orig");void 0!==f&&void 0!==f._grid&&f._grid._triggerRemoveEvent(),a(c.helper).remove(),d.el=e,j.placeholder.hide(),e.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).addClass(j.opts.itemClass).removeAttr("style").enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),j.container.append(e),j._prepareElementsByNode(e,d),j._updateContainerHeight(),j.grid._addedNodes.push(d),j._triggerAddEvent(),j._triggerChangeEvent(),j.grid.endUpdate(),a(c.draggable).unbind("drag",p),a(c.draggable).removeData("_gridstack_node"),a(c.draggable).removeData("_gridstack_node_orig")})}};return j.prototype._triggerChangeEvent=function(a){var b=this.grid.getDirtyNodes(),c=!1,d=[];b&&b.length&&(d.push(b),c=!0),(c||!0===a)&&this.container.trigger("change",d)},j.prototype._triggerAddEvent=function(){this.grid._addedNodes&&this.grid._addedNodes.length>0&&(this.container.trigger("added",[b.map(this.grid._addedNodes,b.clone)]),this.grid._addedNodes=[])},j.prototype._triggerRemoveEvent=function(){this.grid._removedNodes&&this.grid._removedNodes.length>0&&(this.container.trigger("removed",[b.map(this.grid._removedNodes,b.clone)]),this.grid._removedNodes=[])},j.prototype._initStyles=function(){this._stylesId&&g.removeStylesheet(this._stylesId),this._stylesId="gridstack-style-"+(1e5*Math.random()).toFixed(),this._styles=g.createStylesheet(this._stylesId),null!==this._styles&&(this._styles._max=0)},j.prototype._updateStyles=function(a){if(null!==this._styles&&void 0!==this._styles){var b,c="."+this.opts._class+" ."+this.opts.itemClass,d=this;if(void 0===a&&(a=this._styles._max),this._initStyles(),this._updateContainerHeight(),this.opts.cellHeight&&!(0!==this._styles._max&&a<=this._styles._max)&&(b=this.opts.verticalMargin&&this.opts.cellHeightUnit!==this.opts.verticalMarginUnit?function(a,b){return a&&b?"calc("+(d.opts.cellHeight*a+d.opts.cellHeightUnit)+" + "+(d.opts.verticalMargin*b+d.opts.verticalMarginUnit)+")":d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit}:function(a,b){return d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit},0===this._styles._max&&g.insertCSSRule(this._styles,c,"min-height: "+b(1,0)+";",0),a>this._styles._max)){for(var e=this._styles._max;e=f.grid.width||k<0||!f.grid.float&&k>f.grid.getGridHeight()?c._temporaryRemoved||(!0===f.opts.removable&&f._setupRemovingTimeout(b),j=c._beforeDragX,k=c._beforeDragY,f.placeholder.detach(),f.placeholder.hide(),f.grid.removeNode(c),f._updateContainerHeight(),c._temporaryRemoved=!0):(f._clearRemovingTimeout(b),c._temporaryRemoved&&(f.grid.addNode(c),f.placeholder.attr("data-gs-x",j).attr("data-gs-y",k).attr("data-gs-width",h).attr("data-gs-height",i).show(),f.container.append(f.placeholder),c.el=f.placeholder,c._temporaryRemoved=!1));else if("resize"==a.type&&j<0)return;var l=void 0!==h?h:c.lastTriedWidth,m=void 0!==i?i:c.lastTriedHeight;!f.grid.canMoveNode(c,j,k,h,i)||c.lastTriedX===j&&c.lastTriedY===k&&c.lastTriedWidth===l&&c.lastTriedHeight===m||(c.lastTriedX=j,c.lastTriedY=k,c.lastTriedWidth=h,c.lastTriedHeight=i,f.grid.moveNode(c,j,k,h,i),f._updateContainerHeight())},h=function(g,h){f.container.append(f.placeholder);var i=a(this);f.grid.cleanNodes(),f.grid.beginUpdate(c),d=f.cellWidth();var j=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));e=f.container.height()/parseInt(f.container.attr("data-gs-current-height")),f.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),c.el=f.placeholder,c._beforeDragX=c.x,c._beforeDragY=c.y,f.dd.resizable(b,"option","minWidth",d*(c.minWidth||1)),f.dd.resizable(b,"option","minHeight",j*(c.minHeight||1)),"resizestart"==g.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(d,e){var g=a(this);if(g.data("_gridstack_node")){var h=!1;if(f.placeholder.detach(),c.el=g,f.placeholder.hide(),c._isAboutToRemove){h=!0;b.data("_gridstack_node")._grid._triggerRemoveEvent(),b.removeData("_gridstack_node"),b.remove()}else f._clearRemovingTimeout(b),c._temporaryRemoved?(g.attr("data-gs-x",c._beforeDragX).attr("data-gs-y",c._beforeDragY).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style"),c.x=c._beforeDragX,c.y=c._beforeDragY,f.grid.addNode(c)):g.attr("data-gs-x",c.x).attr("data-gs-y",c.y).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style");f._updateContainerHeight(),f._triggerChangeEvent(h),f.grid.endUpdate();var i=g.find(".grid-stack");i.length&&"resizestop"==d.type&&(i.each(function(b,c){a(c).data("gridstack").onResizeHandler()}),g.find(".grid-stack-item").trigger("resizestop"),g.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==d.type&&f.container.trigger("gsresizestop",g)}};this.dd.draggable(b,{start:h,stop:i,drag:g}).resizable(b,{start:h,stop:i,resize:g}),(c.noMove||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableDrag)&&this.dd.draggable(b,"disable"),(c.noResize||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableResize)&&this.dd.resizable(b,"disable"),b.attr("data-gs-locked",c.locked?"yes":null)},j.prototype._prepareElement=function(b,c){c=void 0!==c&&c;var d=this;b=a(b),b.addClass(this.opts.itemClass);var e=d.grid.addNode({x:b.attr("data-gs-x"),y:b.attr("data-gs-y"),width:b.attr("data-gs-width"),height:b.attr("data-gs-height"),maxWidth:b.attr("data-gs-max-width"),minWidth:b.attr("data-gs-min-width"),maxHeight:b.attr("data-gs-max-height"),minHeight:b.attr("data-gs-min-height"),autoPosition:g.toBool(b.attr("data-gs-auto-position")),noResize:g.toBool(b.attr("data-gs-no-resize")),noMove:g.toBool(b.attr("data-gs-no-move")),locked:g.toBool(b.attr("data-gs-locked")),resizeHandles:b.attr("data-gs-resize-handles"),el:b,id:b.attr("data-gs-id"),_grid:d},c);b.data("_gridstack_node",e),this._prepareElementsByNode(b,e)},j.prototype.setAnimation=function(a){a?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},j.prototype.addWidget=function(b,c,d,e,f,g,h,i,j,k,l){return b=a(b),void 0!==c&&b.attr("data-gs-x",c),void 0!==d&&b.attr("data-gs-y",d),void 0!==e&&b.attr("data-gs-width",e),void 0!==f&&b.attr("data-gs-height",f),void 0!==g&&b.attr("data-gs-auto-position",g?"yes":null),void 0!==h&&b.attr("data-gs-min-width",h),void 0!==i&&b.attr("data-gs-max-width",i),void 0!==j&&b.attr("data-gs-min-height",j),void 0!==k&&b.attr("data-gs-max-height",k),void 0!==l&&b.attr("data-gs-id",l),this.container.append(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},j.prototype.makeWidget=function(b){return b=a(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},j.prototype.willItFit=function(a,b,c,d,e){var f={x:a,y:b,width:c,height:d,autoPosition:e};return this.grid.canBePlacedWithRespectToHeight(f)},j.prototype.removeWidget=function(b,c){c=void 0===c||c,b=a(b);var d=b.data("_gridstack_node");d||(d=this.grid.getNodeDataByDOMEl(b)),this.grid.removeNode(d,c),b.removeData("_gridstack_node"),this._updateContainerHeight(),c&&b.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},j.prototype.removeAll=function(a){b.each(this.grid.nodes,b.bind(function(b){this.removeWidget(b.el,a)},this)),this.grid.nodes=[],this._updateContainerHeight()},j.prototype.destroy=function(b){a(window).off("resize",this.onResizeHandler),this.disable(),void 0===b||b?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),g.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},j.prototype.resizable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noResize=!c,f.noResize||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?d.dd.resizable(e,"disable"):d.dd.resizable(e,"enable"))}),this},j.prototype.movable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noMove=!c,f.noMove||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?(d.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(d.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},j.prototype.enableMove=function(a,b){this.movable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableDrag=!a)},j.prototype.enableResize=function(a,b){this.resizable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableResize=!a)},j.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},j.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},j.prototype.locked=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(e.locked=c||!1,d.attr("data-gs-locked",e.locked?"yes":null))}),this},j.prototype.maxHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxHeight=c||!1,d.attr("data-gs-max-height",c)))}),this},j.prototype.minHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minHeight=c||!1,d.attr("data-gs-min-height",c)))}),this},j.prototype.maxWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxWidth=c||!1,d.attr("data-gs-max-width",c)))}),this},j.prototype.minWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minWidth=c||!1,d.attr("data-gs-min-width",c)))}),this},j.prototype._updateElement=function(b,c){b=a(b).first();var d=b.data("_gridstack_node");if(void 0!==d&&null!==d){var e=this;e.grid.cleanNodes(),e.grid.beginUpdate(d),c.call(this,b,d),e._updateContainerHeight(),e._triggerChangeEvent(),e.grid.endUpdate()}},j.prototype.resize=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.width,c=null!==c&&void 0!==c?c:d.height,this.grid.moveNode(d,d.x,d.y,b,c)})},j.prototype.move=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.x,c=null!==c&&void 0!==c?c:d.y,this.grid.moveNode(d,b,c,d.width,d.height)})},j.prototype.update=function(a,b,c,d,e){this._updateElement(a,function(a,f){b=null!==b&&void 0!==b?b:f.x,c=null!==c&&void 0!==c?c:f.y,d=null!==d&&void 0!==d?d:f.width,e=null!==e&&void 0!==e?e:f.height,this.grid.moveNode(f,b,c,d,e)})},j.prototype.verticalMargin=function(a,b){if(void 0===a)return this.opts.verticalMargin;var c=g.parseHeight(a);this.opts.verticalMarginUnit===c.unit&&this.opts.height===c.height||(this.opts.verticalMarginUnit=c.unit,this.opts.verticalMargin=c.height,b||this._updateStyles())},j.prototype.cellHeight=function(a,b){if(void 0===a){if(this.opts.cellHeight)return this.opts.cellHeight;var c=this.container.children("."+this.opts.itemClass).first();return Math.ceil(c.outerHeight()/c.attr("data-gs-height"))}var d=g.parseHeight(a);this.opts.cellHeightUnit===d.heightUnit&&this.opts.height===d.height||(this.opts.cellHeightUnit=d.unit,this.opts.cellHeight=d.height,b||this._updateStyles())},j.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},j.prototype.getCellFromPixel=function(a,b){var c=void 0!==b&&b?this.container.offset():this.container.position(),d=a.left-c.left,e=a.top-c.top,f=Math.floor(this.container.width()/this.opts.width),g=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(d/f),y:Math.floor(e/g)}},j.prototype.batchUpdate=function(){this.grid.batchUpdate()},j.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},j.prototype.isAreaEmpty=function(a,b,c,d){return this.grid.isAreaEmpty(a,b,c,d)},j.prototype.setStatic=function(a){this.opts.staticGrid=!0===a,this.enableMove(!a),this.enableResize(!a),this._setStaticClass()},j.prototype._setStaticClass=function(){!0===this.opts.staticGrid?this.container.addClass("grid-stack-static"):this.container.removeClass("grid-stack-static")},j.prototype._updateNodeWidths=function(a,b){this.grid._sortNodes(),this.grid.batchUpdate();for(var c={},d=0;de?1:-1})},defaults:function(a){return Array.prototype.slice.call(arguments,1).forEach(function(b){for(var c in b)b.hasOwnProperty(c)&&!a.hasOwnProperty(c)&&(a[c]=b[c])}),a},clone:function(b){return a.extend({},b)},throttle:function(a,b){var c=!1;return function(){c||(a.apply(this,arguments),c=!0,setTimeout(function(){c=!1},b))}}};f.is_intercepted=d(f.isIntercepted,"is_intercepted","isIntercepted"),f.create_stylesheet=d(f.createStylesheet,"create_stylesheet","createStylesheet"),f.remove_stylesheet=d(f.removeStylesheet,"remove_stylesheet","removeStylesheet"),f.insert_css_rule=d(f.insertCSSRule,"insert_css_rule","insertCSSRule"),b.registeredPlugins=[],b.registerPlugin=function(a){b.registeredPlugins.push(a)},b.prototype.resizable=function(a,b){return this},b.prototype.draggable=function(a,b){return this},b.prototype.droppable=function(a,b){return this},b.prototype.isDroppable=function(a){return!1},b.prototype.on=function(a,b,c){return this};var g=0,h=function(a,b,c,d,e){this.width=a,this.float=c||!1,this.height=d||0,this.nodes=e||[],this.onchange=b||function(){},this._updateCounter=0,this._float=this.float,this._addedNodes=[],this._removedNodes=[]};h.prototype.batchUpdate=function(){this._updateCounter=1,this.float=!0},h.prototype.commit=function(){0!==this._updateCounter&&(this._updateCounter=0,this.float=this._float,this._packNodes(),this._notify())},h.prototype.getNodeDataByDOMEl=function(a){return this.nodes.find(function(b){return a.get(0)===b.el.get(0)})},h.prototype._fixCollisions=function(a){this._sortNodes(-1);var b=a,c=Boolean(this.nodes.find(function(a){return a.locked}));for(this.float||c||(b={x:0,y:a.y,width:this.width,height:a.height});;){var d=this.nodes.find(f._collisionNodeCheck,{node:a,nn:b});if(void 0===d)return;this.moveNode(d,d.x,a.y+a.height,d.width,d.height,!0)}},h.prototype.isAreaEmpty=function(a,b,c,d){var e={x:a||0,y:b||0,width:c||1,height:d||1},g=this.nodes.find(function(a){return f.isIntercepted(a,e)});return null===g||void 0===g},h.prototype._sortNodes=function(a){this.nodes=f.sort(this.nodes,a,this.width)},h.prototype._packNodes=function(){this._sortNodes(),this.float?this.nodes.forEach(function(a,b){if(!a._updating&&void 0!==a._origY&&a.y!=a._origY)for(var c=a.y;c>=a._origY;){var d=this.nodes.find(f._didCollide,{n:a,newY:c});d||(a._dirty=!0,a.y=c),--c}},this):this.nodes.forEach(function(a,b){if(!a.locked)for(;a.y>0;){var c=a.y-1,d=0===b;if(b>0){var e=this.nodes.slice(0,b).find(f._didCollide,{n:a,newY:c});d=void 0===e}if(!d)break;a._dirty=a.y!=c,a.y=c}},this)},h.prototype._prepareNode=function(a,b){return a=f.defaults(a||{},{width:1,height:1,x:0,y:0}),a.x=parseInt(""+a.x),a.y=parseInt(""+a.y),a.width=parseInt(""+a.width),a.height=parseInt(""+a.height),a.autoPosition=a.autoPosition||!1,a.noResize=a.noResize||!1,a.noMove=a.noMove||!1,a.width>this.width?a.width=this.width:a.width<1&&(a.width=1),a.height<1&&(a.height=1),a.x<0&&(a.x=0),a.x+a.width>this.width&&(b?a.width=this.width-a.x:a.x=this.width-a.width),a.y<0&&(a.y=0),a},h.prototype._notify=function(){var a=Array.prototype.slice.call(arguments,0);if(a[0]=void 0===a[0]?[]:[a[0]],a[1]=void 0===a[1]||a[1],!this._updateCounter){var b=a[0].concat(this.getDirtyNodes());this.onchange(b,a[1])}},h.prototype.cleanNodes=function(){this._updateCounter||this.nodes.forEach(function(a){a._dirty=!1})},h.prototype.getDirtyNodes=function(){return this.nodes.filter(function(a){return a._dirty})},h.prototype.addNode=function(a,b){if(a=this._prepareNode(a),void 0!==a.maxWidth&&(a.width=Math.min(a.width,a.maxWidth)),void 0!==a.maxHeight&&(a.height=Math.min(a.height,a.maxHeight)),void 0!==a.minWidth&&(a.width=Math.max(a.width,a.minWidth)),void 0!==a.minHeight&&(a.height=Math.max(a.height,a.minHeight)),a._id=++g,a._dirty=!0,a.autoPosition){this._sortNodes();for(var c=0;;++c){var d=c%this.width,e=Math.floor(c/this.width);if(!(d+a.width>this.width)&&!this.nodes.find(f._isAddNodeIntercepted,{x:d,y:e,node:a})){a.x=d,a.y=e;break}}}return this.nodes.push(a),void 0!==b&&b&&this._addedNodes.push(f.clone(a)),this._fixCollisions(a),this._packNodes(),this._notify(),a},h.prototype.removeNode=function(a,b){b=void 0===b||b,this._removedNodes.push(f.clone(a)),a._id=null,this.nodes=f.without(this.nodes,a),this._packNodes(),this._notify(a,b)},h.prototype.canMoveNode=function(b,c,d,e,f){if(!this.isNodeChangedPosition(b,c,d,e,f))return!1;var g=Boolean(this.nodes.find(function(a){return a.locked}));if(!this.height&&!g)return!0;var i,j=new h(this.width,null,this.float,0,this.nodes.map(function(c){return c==b?i=a.extend({},c):a.extend({},c)}));if(void 0===i)return!0;j.moveNode(i,c,d,e,f);var k=!0;return g&&(k&=!Boolean(j.nodes.find(function(a){return a!=i&&Boolean(a.locked)&&Boolean(a._dirty)}))),this.height&&(k&=j.getGridHeight()<=this.height),k},h.prototype.canBePlacedWithRespectToHeight=function(b){if(!this.height)return!0;var c=new h(this.width,null,this.float,0,this.nodes.map(function(b){return a.extend({},b)}));return c.addNode(b),c.getGridHeight()<=this.height},h.prototype.isNodeChangedPosition=function(a,b,c,d,e){return"number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x!=b||a.y!=c||a.width!=d||a.height!=e},h.prototype.moveNode=function(a,b,c,d,e,f){if(!this.isNodeChangedPosition(a,b,c,d,e))return a;if("number"!=typeof b&&(b=a.x),"number"!=typeof c&&(c=a.y),"number"!=typeof d&&(d=a.width),"number"!=typeof e&&(e=a.height),void 0!==a.maxWidth&&(d=Math.min(d,a.maxWidth)),void 0!==a.maxHeight&&(e=Math.min(e,a.maxHeight)),void 0!==a.minWidth&&(d=Math.max(d,a.minWidth)),void 0!==a.minHeight&&(e=Math.max(e,a.minHeight)),a.x==b&&a.y==c&&a.width==d&&a.height==e)return a;var g=a.width!=d;return a._dirty=!0,a.x=b,a.y=c,a.width=d,a.height=e,a.lastTriedX=b,a.lastTriedY=c,a.lastTriedWidth=d,a.lastTriedHeight=e,a=this._prepareNode(a,g),this._fixCollisions(a),f||(this._packNodes(),this._notify()),a},h.prototype.getGridHeight=function(){return this.nodes.reduce(function(a,b){return Math.max(a,b.y+b.height)},0)},h.prototype.beginUpdate=function(a){this.nodes.forEach(function(a){a._origY=a.y}),a._updating=!0},h.prototype.endUpdate=function(){this.nodes.forEach(function(a){a._origY=a.y});var a=this.nodes.find(function(a){return a._updating});a&&(a._updating=!1)};var i=function(c,d){var g,i,j=this;d=d||{},this.container=a(c),void 0!==d.handle_class&&(d.handleClass=d.handle_class,e("handle_class","handleClass")),void 0!==d.item_class&&(d.itemClass=d.item_class,e("item_class","itemClass")),void 0!==d.placeholder_class&&(d.placeholderClass=d.placeholder_class,e("placeholder_class","placeholderClass")),void 0!==d.placeholder_text&&(d.placeholderText=d.placeholder_text,e("placeholder_text","placeholderText")),void 0!==d.cell_height&&(d.cellHeight=d.cell_height,e("cell_height","cellHeight")),void 0!==d.vertical_margin&&(d.verticalMargin=d.vertical_margin,e("vertical_margin","verticalMargin")),void 0!==d.min_width&&(d.minWidth=d.min_width,e("min_width","minWidth")),void 0!==d.static_grid&&(d.staticGrid=d.static_grid,e("static_grid","staticGrid")),void 0!==d.is_nested&&(d.isNested=d.is_nested,e("is_nested","isNested")),void 0!==d.always_show_resize_handle&&(d.alwaysShowResizeHandle=d.always_show_resize_handle,e("always_show_resize_handle","alwaysShowResizeHandle")),d.itemClass=d.itemClass||"grid-stack-item";var k=this.container.closest("."+d.itemClass).length>0;if(this.opts=f.defaults(d||{},{width:parseInt(this.container.attr("data-gs-width"))||12,height:parseInt(this.container.attr("data-gs-height"))||0,itemClass:"grid-stack-item",placeholderClass:"grid-stack-placeholder",placeholderText:"",handle:".grid-stack-item-content",handleClass:null,cellHeight:60,verticalMargin:20,auto:!0,minWidth:768,float:!1,staticGrid:!1,_class:"grid-stack-instance-"+(1e4*Math.random()).toFixed(0),animate:Boolean(this.container.attr("data-gs-animate"))||!1,alwaysShowResizeHandle:d.alwaysShowResizeHandle||!1,resizable:f.defaults(d.resizable||{},{autoHide:!d.alwaysShowResizeHandle,handles:"se"}),draggable:f.defaults(d.draggable||{},{handle:(d.handleClass?"."+d.handleClass:d.handle?d.handle:"")||".grid-stack-item-content",scroll:!1,appendTo:"body"}),disableDrag:d.disableDrag||!1,disableResize:d.disableResize||!1,rtl:"auto",removable:!1,removeTimeout:2e3,verticalMarginUnit:"px",cellHeightUnit:"px",disableOneColumnMode:d.disableOneColumnMode||!1,oneColumnModeClass:d.oneColumnModeClass||"grid-stack-one-column-mode",ddPlugin:null}),!1===this.opts.ddPlugin?this.opts.ddPlugin=b:null===this.opts.ddPlugin&&(this.opts.ddPlugin=b.registeredPlugins[0]||b),this.dd=new this.opts.ddPlugin(this),"auto"===this.opts.rtl&&(this.opts.rtl="rtl"===this.container.css("direction")),this.opts.rtl&&this.container.addClass("grid-stack-rtl"),this.opts.isNested=k,i="auto"===this.opts.cellHeight,i?j.cellHeight(j.cellWidth(),!0):this.cellHeight(this.opts.cellHeight,!0),this.verticalMargin(this.opts.verticalMargin,!0),this.container.addClass(this.opts._class),this._setStaticClass(),k&&this.container.addClass("grid-stack-nested"),this._initStyles(),this.grid=new h(this.opts.width,function(a,b){b=void 0===b||b;var c=0;a.forEach(function(a){b&&null===a._id?a.el&&a.el.remove():(a.el.attr("data-gs-x",a.x).attr("data-gs-y",a.y).attr("data-gs-width",a.width).attr("data-gs-height",a.height),c=Math.max(c,a.y+a.height))}),j._updateStyles(c+10)},this.opts.float,this.opts.height),this.opts.auto){var l=[],m=this;this.container.children("."+this.opts.itemClass+":not(."+this.opts.placeholderClass+")").each(function(b,c){c=a(c),l.push({el:c,i:parseInt(c.attr("data-gs-x"))+parseInt(c.attr("data-gs-y"))*m.opts.width})}),f.sortBy(l,function(a){return a.i}).forEach(function(a){this._prepareElement(a.el)},this)}if(this.setAnimation(this.opts.animate),this.placeholder=a('
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=f.throttle(function(){j.cellHeight(j.cellWidth(),!1)},100),this.onResizeHandler=function(){if(i&&j._updateHeightsOnResize(),j._isOneColumnMode()&&!j.opts.disableOneColumnMode){if(g)return;j.container.addClass(j.opts.oneColumnModeClass),g=!0,j.grid._sortNodes(),j.grid.nodes.forEach(function(a){j.container.append(a.el),j.opts.staticGrid||(j.dd.draggable(a.el,"disable"),j.dd.resizable(a.el,"disable"),a.el.trigger("resize"))})}else{if(!g)return;if(j.container.removeClass(j.opts.oneColumnModeClass),g=!1,j.opts.staticGrid)return;j.grid.nodes.forEach(function(a){a.noMove||j.opts.disableDrag||j.dd.draggable(a.el,"enable"),a.noResize||j.opts.disableResize||j.dd.resizable(a.el,"enable"),a.el.trigger("resize")})}},a(window).resize(this.onResizeHandler),this.onResizeHandler(),!j.opts.staticGrid&&"string"==typeof j.opts.removable){var n=a(j.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,{accept:"."+j.opts.itemClass}),this.dd.on(n,"dropover",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._setupRemovingTimeout(d)}).on(n,"dropout",function(b,c){var d=a(c.draggable);d.data("_gridstack_node")._grid===j&&j._clearRemovingTimeout(d)})}if(!j.opts.staticGrid&&j.opts.acceptWidgets){var o=null,p=function(a,b){var c=o,d=c.data("_gridstack_node"),e=j.getCellFromPixel(b.offset,!0),f=Math.max(0,e.x),g=Math.max(0,e.y);if(d._added){if(!j.grid.canMoveNode(d,f,g))return;j.grid.moveNode(d,f,g),j._updateContainerHeight()}else d._added=!0,d.el=c,d.x=f,d.y=g,j.grid.cleanNodes(),j.grid.beginUpdate(d),j.grid.addNode(d),j.container.append(j.placeholder),j.placeholder.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).show(),d.el=j.placeholder,d._beforeDragX=d.x,d._beforeDragY=d.y,j._updateContainerHeight()};this.dd.droppable(j.container,{accept:function(b){b=a(b);var c=b.data("_gridstack_node");return(!c||c._grid!==j)&&b.is(!0===j.opts.acceptWidgets?".grid-stack-item":j.opts.acceptWidgets)}}).on(j.container,"dropover",function(b,c){var d=(j.container.offset(),a(c.draggable)),e=j.cellWidth(),f=j.cellHeight(),g=d.data("_gridstack_node"),h=g?g.width:Math.ceil(d.outerWidth()/e),i=g?g.height:Math.ceil(d.outerHeight()/f);o=d;var k=j.grid._prepareNode({width:h,height:i,_added:!1,_temporary:!0});d.data("_gridstack_node",k),d.data("_gridstack_node_orig",g),d.on("drag",p)}).on(j.container,"dropout",function(b,c){var d=a(c.draggable);if(d.data("_gridstack_node")){d.unbind("drag",p);var e=d.data("_gridstack_node");e.el=null,j.grid.removeNode(e),j.placeholder.detach(),j._updateContainerHeight(),d.data("_gridstack_node",d.data("_gridstack_node_orig"))}}).on(j.container,"drop",function(b,c){j.placeholder.detach();var d=a(c.draggable).data("_gridstack_node");d._grid=j;var e=a(c.draggable).clone(!1);e.data("_gridstack_node",d);var f=a(c.draggable).data("_gridstack_node_orig");void 0!==f&&void 0!==f._grid&&f._grid._triggerRemoveEvent(),a(c.helper).remove(),d.el=e,j.placeholder.hide(),e.attr("data-gs-x",d.x).attr("data-gs-y",d.y).attr("data-gs-width",d.width).attr("data-gs-height",d.height).addClass(j.opts.itemClass).removeAttr("style").enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),j.container.append(e),j._prepareElementsByNode(e,d),j._updateContainerHeight(),j.grid._addedNodes.push(d),j._triggerAddEvent(),j._triggerChangeEvent(),j.grid.endUpdate(),a(c.draggable).unbind("drag",p),a(c.draggable).removeData("_gridstack_node"),a(c.draggable).removeData("_gridstack_node_orig")})}};return i.prototype._triggerChangeEvent=function(a){var b=this.grid.getDirtyNodes(),c=!1,d=[];b&&b.length&&(d.push(b),c=!0),(c||!0===a)&&this.container.trigger("change",d)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&this.grid._addedNodes.length>0&&(this.container.trigger("added",[this.grid._addedNodes.map(f.clone)]),this.grid._addedNodes=[])},i.prototype._triggerRemoveEvent=function(){this.grid._removedNodes&&this.grid._removedNodes.length>0&&(this.container.trigger("removed",[this.grid._removedNodes.map(f.clone)]),this.grid._removedNodes=[])},i.prototype._initStyles=function(){this._stylesId&&f.removeStylesheet(this._stylesId),this._stylesId="gridstack-style-"+(1e5*Math.random()).toFixed(),this._styles=f.createStylesheet(this._stylesId),null!==this._styles&&(this._styles._max=0)},i.prototype._updateStyles=function(a){if(null!==this._styles&&void 0!==this._styles){var b,c="."+this.opts._class+" ."+this.opts.itemClass,d=this;if(void 0===a&&(a=this._styles._max),this._initStyles(),this._updateContainerHeight(),this.opts.cellHeight&&!(0!==this._styles._max&&a<=this._styles._max)&&(b=this.opts.verticalMargin&&this.opts.cellHeightUnit!==this.opts.verticalMarginUnit?function(a,b){return a&&b?"calc("+(d.opts.cellHeight*a+d.opts.cellHeightUnit)+" + "+(d.opts.verticalMargin*b+d.opts.verticalMarginUnit)+")":d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit}:function(a,b){return d.opts.cellHeight*a+d.opts.verticalMargin*b+d.opts.cellHeightUnit},0===this._styles._max&&f.insertCSSRule(this._styles,c,"min-height: "+b(1,0)+";",0),a>this._styles._max)){for(var e=this._styles._max;e=f.grid.width||k<0||!f.grid.float&&k>f.grid.getGridHeight()?c._temporaryRemoved||(!0===f.opts.removable&&f._setupRemovingTimeout(b),j=c._beforeDragX,k=c._beforeDragY,f.placeholder.detach(),f.placeholder.hide(),f.grid.removeNode(c),f._updateContainerHeight(),c._temporaryRemoved=!0):(f._clearRemovingTimeout(b),c._temporaryRemoved&&(f.grid.addNode(c),f.placeholder.attr("data-gs-x",j).attr("data-gs-y",k).attr("data-gs-width",h).attr("data-gs-height",i).show(),f.container.append(f.placeholder),c.el=f.placeholder,c._temporaryRemoved=!1));else if("resize"==a.type&&j<0)return;var l=void 0!==h?h:c.lastTriedWidth,m=void 0!==i?i:c.lastTriedHeight;!f.grid.canMoveNode(c,j,k,h,i)||c.lastTriedX===j&&c.lastTriedY===k&&c.lastTriedWidth===l&&c.lastTriedHeight===m||(c.lastTriedX=j,c.lastTriedY=k,c.lastTriedWidth=h,c.lastTriedHeight=i,f.grid.moveNode(c,j,k,h,i),f._updateContainerHeight())},h=function(g,h){f.container.append(f.placeholder);var i=a(this);f.grid.cleanNodes(),f.grid.beginUpdate(c),d=f.cellWidth();var j=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));e=f.container.height()/parseInt(f.container.attr("data-gs-current-height")),f.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),c.el=f.placeholder,c._beforeDragX=c.x,c._beforeDragY=c.y,f.dd.resizable(b,"option","minWidth",d*(c.minWidth||1)),f.dd.resizable(b,"option","minHeight",j*(c.minHeight||1)),"resizestart"==g.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(d,e){var g=a(this);if(g.data("_gridstack_node")){var h=!1;if(f.placeholder.detach(),c.el=g,f.placeholder.hide(),c._isAboutToRemove){h=!0;b.data("_gridstack_node")._grid._triggerRemoveEvent(),b.removeData("_gridstack_node"),b.remove()}else f._clearRemovingTimeout(b),c._temporaryRemoved?(g.attr("data-gs-x",c._beforeDragX).attr("data-gs-y",c._beforeDragY).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style"),c.x=c._beforeDragX,c.y=c._beforeDragY,f.grid.addNode(c)):g.attr("data-gs-x",c.x).attr("data-gs-y",c.y).attr("data-gs-width",c.width).attr("data-gs-height",c.height).removeAttr("style");f._updateContainerHeight(),f._triggerChangeEvent(h),f.grid.endUpdate();var i=g.find(".grid-stack");i.length&&"resizestop"==d.type&&(i.each(function(b,c){a(c).data("gridstack").onResizeHandler()}),g.find(".grid-stack-item").trigger("resizestop"),g.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==d.type&&f.container.trigger("gsresizestop",g)}};this.dd.draggable(b,{start:h,stop:i,drag:g}).resizable(b,{start:h,stop:i,resize:g}),(c.noMove||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableDrag)&&this.dd.draggable(b,"disable"),(c.noResize||this._isOneColumnMode()&&!f.opts.disableOneColumnMode||this.opts.disableResize)&&this.dd.resizable(b,"disable"),b.attr("data-gs-locked",c.locked?"yes":null)},i.prototype._prepareElement=function(b,c){c=void 0!==c&&c;var d=this;b=a(b),b.addClass(this.opts.itemClass);var e=d.grid.addNode({x:b.attr("data-gs-x"),y:b.attr("data-gs-y"),width:b.attr("data-gs-width"),height:b.attr("data-gs-height"),maxWidth:b.attr("data-gs-max-width"),minWidth:b.attr("data-gs-min-width"),maxHeight:b.attr("data-gs-max-height"),minHeight:b.attr("data-gs-min-height"),autoPosition:f.toBool(b.attr("data-gs-auto-position")),noResize:f.toBool(b.attr("data-gs-no-resize")),noMove:f.toBool(b.attr("data-gs-no-move")),locked:f.toBool(b.attr("data-gs-locked")),resizeHandles:b.attr("data-gs-resize-handles"),el:b,id:b.attr("data-gs-id"),_grid:d},c);b.data("_gridstack_node",e),this._prepareElementsByNode(b,e)},i.prototype.setAnimation=function(a){a?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(b,c,d,e,f,g,h,i,j,k,l){return b=a(b),void 0!==c&&b.attr("data-gs-x",c),void 0!==d&&b.attr("data-gs-y",d),void 0!==e&&b.attr("data-gs-width",e),void 0!==f&&b.attr("data-gs-height",f),void 0!==g&&b.attr("data-gs-auto-position",g?"yes":null),void 0!==h&&b.attr("data-gs-min-width",h),void 0!==i&&b.attr("data-gs-max-width",i),void 0!==j&&b.attr("data-gs-min-height",j),void 0!==k&&b.attr("data-gs-max-height",k),void 0!==l&&b.attr("data-gs-id",l),this.container.append(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},i.prototype.makeWidget=function(b){return b=a(b),this._prepareElement(b,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),b},i.prototype.willItFit=function(a,b,c,d,e){var f={x:a,y:b,width:c,height:d,autoPosition:e};return this.grid.canBePlacedWithRespectToHeight(f)},i.prototype.removeWidget=function(b,c){c=void 0===c||c,b=a(b);var d=b.data("_gridstack_node");d||(d=this.grid.getNodeDataByDOMEl(b)),this.grid.removeNode(d,c),b.removeData("_gridstack_node"),this._updateContainerHeight(),c&&b.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(a){this.grid.nodes.forEach(function(b){this.removeWidget(b.el,a)},this),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(b){a(window).off("resize",this.onResizeHandler),this.disable(),void 0===b||b?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),f.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noResize=!c,f.noResize||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?d.dd.resizable(e,"disable"):d.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(b,c){var d=this;return b=a(b),b.each(function(b,e){e=a(e);var f=e.data("_gridstack_node");void 0!==f&&null!==f&&(f.noMove=!c,f.noMove||d._isOneColumnMode()&&!d.opts.disableOneColumnMode?(d.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(d.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(a,b){this.movable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableDrag=!a)},i.prototype.enableResize=function(a,b){this.resizable(this.container.children("."+this.opts.itemClass),a),b&&(this.opts.disableResize=!a)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(e.locked=c||!1,d.attr("data-gs-locked",e.locked?"yes":null))}),this},i.prototype.maxHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxHeight=c||!1,d.attr("data-gs-max-height",c)))}),this},i.prototype.minHeight=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minHeight=c||!1,d.attr("data-gs-min-height",c)))}),this},i.prototype.maxWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.maxWidth=c||!1,d.attr("data-gs-max-width",c)))}),this},i.prototype.minWidth=function(b,c){return b=a(b),b.each(function(b,d){d=a(d);var e=d.data("_gridstack_node");void 0!==e&&null!==e&&(isNaN(c)||(e.minWidth=c||!1,d.attr("data-gs-min-width",c)))}),this},i.prototype._updateElement=function(b,c){b=a(b).first();var d=b.data("_gridstack_node");if(void 0!==d&&null!==d){var e=this;e.grid.cleanNodes(),e.grid.beginUpdate(d),c.call(this,b,d),e._updateContainerHeight(),e._triggerChangeEvent(),e.grid.endUpdate()}},i.prototype.resize=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.width,c=null!==c&&void 0!==c?c:d.height,this.grid.moveNode(d,d.x,d.y,b,c)})},i.prototype.move=function(a,b,c){this._updateElement(a,function(a,d){b=null!==b&&void 0!==b?b:d.x,c=null!==c&&void 0!==c?c:d.y,this.grid.moveNode(d,b,c,d.width,d.height)})},i.prototype.update=function(a,b,c,d,e){this._updateElement(a,function(a,f){b=null!==b&&void 0!==b?b:f.x,c=null!==c&&void 0!==c?c:f.y,d=null!==d&&void 0!==d?d:f.width,e=null!==e&&void 0!==e?e:f.height,this.grid.moveNode(f,b,c,d,e)})},i.prototype.verticalMargin=function(a,b){if(void 0===a)return this.opts.verticalMargin;var c=f.parseHeight(a);this.opts.verticalMarginUnit===c.unit&&this.opts.height===c.height||(this.opts.verticalMarginUnit=c.unit,this.opts.verticalMargin=c.height,b||this._updateStyles())},i.prototype.cellHeight=function(a,b){if(void 0===a){if(this.opts.cellHeight)return this.opts.cellHeight;var c=this.container.children("."+this.opts.itemClass).first();return Math.ceil(c.outerHeight()/c.attr("data-gs-height"))}var d=f.parseHeight(a);this.opts.cellHeightUnit===d.heightUnit&&this.opts.height===d.height||(this.opts.cellHeightUnit=d.unit,this.opts.cellHeight=d.height,b||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(a,b){var c=void 0!==b&&b?this.container.offset():this.container.position(),d=a.left-c.left,e=a.top-c.top,f=Math.floor(this.container.width()/this.opts.width),g=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(d/f),y:Math.floor(e/g)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(a,b,c,d){return this.grid.isAreaEmpty(a,b,c,d)},i.prototype.setStatic=function(a){this.opts.staticGrid=!0===a,this.enableMove(!a),this.enableResize(!a),this._setStaticClass()},i.prototype._setStaticClass=function(){!0===this.opts.staticGrid?this.container.addClass("grid-stack-static"):this.container.removeClass("grid-stack-static")},i.prototype._updateNodeWidths=function(a,b){this.grid._sortNodes(),this.grid.batchUpdate();for(var c={},d=0;d", - "contributors": ["Dylan Weiss (https://dylandreams.com)"], + "contributors": [ + "Dylan Weiss (https://dylandreams.com)" + ], "license": "MIT", "bugs": { "url": "https://github.com/troolee/gridstack.js/issues" @@ -27,11 +29,11 @@ "homepage": "http://troolee.github.io/gridstack.js/", "dependencies": { "jquery": "^3.1.0", - "jquery-ui": "^1.12.0", - "lodash": "^4.14.2" + "jquery-ui": "^1.12.0" }, "devDependencies": { "connect": "^3.4.1", + "core-js": "^2.4.1", "coveralls": "^2.11.8", "doctoc": "^1.3.0", "grunt": "^1.0.1", diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index 2f543eba0..d50a5b3ec 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -16,7 +16,7 @@ - + diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index ef18255a0..67e4785a4 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -209,7 +209,7 @@ describe('gridstack engine', function() { var engine; var findNode = function(engine, id) { - return _.find(engine.nodes, function(i) { return i._id === id; }); + return engine.nodes.find(function(i) { return i._id === id; }); }; beforeEach(function() { diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 79b843319..6aa7564f3 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -7,7 +7,7 @@ */ (function(factory) { if (typeof define === 'function' && define.amd) { - define(['jquery', 'lodash', 'gridstack', 'jquery-ui/data', 'jquery-ui/disable-selection', 'jquery-ui/focusable', + define(['jquery', 'gridstack', 'jquery-ui/data', 'jquery-ui/disable-selection', 'jquery-ui/focusable', 'jquery-ui/form', 'jquery-ui/ie', 'jquery-ui/keycode', 'jquery-ui/labels', 'jquery-ui/jquery-1-7', 'jquery-ui/plugin', 'jquery-ui/safe-active-element', 'jquery-ui/safe-blur', 'jquery-ui/scroll-parent', 'jquery-ui/tabbable', 'jquery-ui/unique-id', 'jquery-ui/version', 'jquery-ui/widget', @@ -15,13 +15,12 @@ 'jquery-ui/widgets/resizable'], factory); } else if (typeof exports !== 'undefined') { try { jQuery = require('jquery'); } catch (e) {} - try { _ = require('lodash'); } catch (e) {} try { GridStackUI = require('gridstack'); } catch (e) {} - factory(jQuery, _, GridStackUI); + factory(jQuery, GridStackUI); } else { - factory(jQuery, _, GridStackUI); + factory(jQuery, GridStackUI); } -})(function($, _, GridStackUI) { +})(function($, GridStackUI) { var scope = window; @@ -49,7 +48,7 @@ } else { var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') : this.grid.opts.resizable.handles; - el.resizable(_.extend({}, this.grid.opts.resizable, { + el.resizable($.extend({}, this.grid.opts.resizable, { handles: handles }, { start: opts.start || function() {}, @@ -65,7 +64,7 @@ if (opts === 'disable' || opts === 'enable') { el.draggable(opts); } else { - el.draggable(_.extend({}, this.grid.opts.draggable, { + el.draggable($.extend({}, this.grid.opts.draggable, { containment: this.grid.opts.isNested ? this.grid.container.parent() : null, start: opts.start || function() {}, stop: opts.stop || function() {}, diff --git a/src/gridstack.js b/src/gridstack.js index 3f4bf80f3..967c346f3 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -7,15 +7,14 @@ */ (function(factory) { if (typeof define === 'function' && define.amd) { - define(['jquery', 'lodash'], factory); + define(['jquery'], factory); } else if (typeof exports !== 'undefined') { try { jQuery = require('jquery'); } catch (e) {} - try { _ = require('lodash'); } catch (e) {} - factory(jQuery, _); + factory(jQuery); } else { - factory(jQuery, _); + factory(jQuery); } -})(function($, _) { +})(function($) { var scope = window; @@ -36,14 +35,19 @@ }; var Utils = { + isIntercepted: function(a, b) { return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); }, sort: function(nodes, dir, width) { - width = width || _.chain(nodes).map(function(node) { return node.x + node.width; }).max().value(); + if (!width) { + var widths = nodes.map(function(node) { return node.x + node.width; }); + width = Math.max.apply(Math, widths); + } + dir = dir != -1 ? 1 : -1; - return _.sortBy(nodes, function(n) { return dir * (n.x + n.y * width); }); + return Utils.sortBy(nodes, function(n) { return dir * (n.x + n.y * width); }); }, createStylesheet: function(id) { @@ -97,7 +101,7 @@ parseHeight: function(val) { var height = val; var heightUnit = 'px'; - if (height && _.isString(height)) { + if (height && typeof height === 'string') { var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/); if (!match) { throw new Error('Invalid height'); @@ -106,6 +110,60 @@ height = parseFloat(match[1]); } return {height: height, unit: heightUnit}; + }, + + without: function(array, item) { + var index = array.indexOf(item); + + if (index !== -1) { + array = array.slice(0); + array.splice(index, 1); + } + + return array; + }, + + sortBy: function(array, getter) { + return array.slice(0).sort(function(left, right) { + var valueLeft = getter(left); + var valueRight = getter(right); + + if (valueRight === valueLeft) { + return 0; + } + + return valueLeft > valueRight ? 1 : -1; + }); + }, + + defaults: function(target) { + var sources = Array.prototype.slice.call(arguments, 1); + + sources.forEach(function(source) { + for (var prop in source) { + if (source.hasOwnProperty(prop) && !target.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + }); + + return target; + }, + + clone: function(target) { + return $.extend({}, target); + }, + + throttle: function(callback, delay) { + var isWaiting = false; + + return function() { + if (!isWaiting) { + callback.apply(this, arguments); + isWaiting = true; + setTimeout(function() { isWaiting = false; }, delay); + } + }; } }; @@ -187,7 +245,7 @@ // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return _.find(this.nodes, function(n) { return el.get(0) === n.el.get(0); }); + return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); }; GridStackEngine.prototype._fixCollisions = function(node) { @@ -195,12 +253,12 @@ this._sortNodes(-1); var nn = node; - var hasLocked = Boolean(_.find(this.nodes, function(n) { return n.locked; })); + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); if (!this.float && !hasLocked) { nn = {x: 0, y: node.y, width: this.width, height: node.height}; } while (true) { - var collisionNode = _.find(this.nodes, _.bind(Utils._collisionNodeCheck, {node: node, nn: nn})); + var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); if (typeof collisionNode == 'undefined') { return; } @@ -211,9 +269,9 @@ GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; - var collisionNode = _.find(this.nodes, _.bind(function(n) { + var collisionNode = this.nodes.find(function(n) { return Utils.isIntercepted(n, nn); - }, this)); + }); return collisionNode === null || typeof collisionNode === 'undefined'; }; @@ -225,16 +283,14 @@ this._sortNodes(); if (this.float) { - _.each(this.nodes, _.bind(function(n, i) { + this.nodes.forEach(function(n, i) { if (n._updating || typeof n._origY == 'undefined' || n.y == n._origY) { return; } var newY = n.y; while (newY >= n._origY) { - var collisionNode = _.chain(this.nodes) - .find(_.bind(Utils._didCollide, {n: n, newY: newY})) - .value(); + var collisionNode = this.nodes.find(Utils._didCollide, {n: n, newY: newY}); if (!collisionNode) { n._dirty = true; @@ -242,9 +298,9 @@ } --newY; } - }, this)); + }, this); } else { - _.each(this.nodes, _.bind(function(n, i) { + this.nodes.forEach(function(n, i) { if (n.locked) { return; } @@ -253,10 +309,9 @@ var canBeMoved = i === 0; if (i > 0) { - var collisionNode = _.chain(this.nodes) - .take(i) - .find(_.bind(Utils._didCollide, {n: n, newY: newY})) - .value(); + var collisionNode = this.nodes + .slice(0, i) + .find(Utils._didCollide, {n: n, newY: newY}); canBeMoved = typeof collisionNode == 'undefined'; } @@ -266,12 +321,12 @@ n._dirty = n.y != newY; n.y = newY; } - }, this)); + }, this); } }; GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = _.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); + node = Utils.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); node.x = parseInt('' + node.x); node.y = parseInt('' + node.y); @@ -325,11 +380,11 @@ if (this._updateCounter) { return; } - _.each(this.nodes, function(n) {n._dirty = false; }); + this.nodes.forEach(function(n) { n._dirty = false; }); }; GridStackEngine.prototype.getDirtyNodes = function() { - return _.filter(this.nodes, function(n) { return n._dirty; }); + return this.nodes.filter(function(n) { return n._dirty; }); }; GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { @@ -352,7 +407,7 @@ if (x + node.width > this.width) { continue; } - if (!_.find(this.nodes, _.bind(Utils._isAddNodeIntercepted, {x: x, y: y, node: node}))) { + if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { node.x = x; node.y = y; break; @@ -362,7 +417,7 @@ this.nodes.push(node); if (typeof triggerAddEvent != 'undefined' && triggerAddEvent) { - this._addedNodes.push(_.clone(node)); + this._addedNodes.push(Utils.clone(node)); } this._fixCollisions(node); @@ -373,9 +428,9 @@ GridStackEngine.prototype.removeNode = function(node, detachNode) { detachNode = typeof detachNode === 'undefined' ? true : detachNode; - this._removedNodes.push(_.clone(node)); + this._removedNodes.push(Utils.clone(node)); node._id = null; - this.nodes = _.without(this.nodes, node); + this.nodes = Utils.without(this.nodes, node); this._packNodes(); this._notify(node, detachNode); }; @@ -384,7 +439,7 @@ if (!this.isNodeChangedPosition(node, x, y, width, height)) { return false; } - var hasLocked = Boolean(_.find(this.nodes, function(n) { return n.locked; })); + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); if (!this.height && !hasLocked) { return true; @@ -396,7 +451,7 @@ null, this.float, 0, - _.map(this.nodes, function(n) { + this.nodes.map(function(n) { if (n == node) { clonedNode = $.extend({}, n); return clonedNode; @@ -413,7 +468,7 @@ var res = true; if (hasLocked) { - res &= !Boolean(_.find(clone.nodes, function(n) { + res &= !Boolean(clone.nodes.find(function(n) { return n != clonedNode && Boolean(n.locked) && Boolean(n._dirty); })); } @@ -434,7 +489,7 @@ null, this.float, 0, - _.map(this.nodes, function(n) { return $.extend({}, n); })); + this.nodes.map(function(n) { return $.extend({}, n); })); clone.addNode(node); return clone.getGridHeight() <= this.height; }; @@ -498,21 +553,21 @@ }; GridStackEngine.prototype.getGridHeight = function() { - return _.reduce(this.nodes, function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); + return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); }; GridStackEngine.prototype.beginUpdate = function(node) { - _.each(this.nodes, function(n) { + this.nodes.forEach(function(n) { n._origY = n.y; }); node._updating = true; }; GridStackEngine.prototype.endUpdate = function() { - _.each(this.nodes, function(n) { + this.nodes.forEach(function(n) { n._origY = n.y; }); - var n = _.find(this.nodes, function(n) { return n._updating; }); + var n = this.nodes.find(function(n) { return n._updating; }); if (n) { n._updating = false; } @@ -572,7 +627,7 @@ opts.itemClass = opts.itemClass || 'grid-stack-item'; var isNested = this.container.closest('.' + opts.itemClass).length > 0; - this.opts = _.defaults(opts || {}, { + this.opts = Utils.defaults(opts || {}, { width: parseInt(this.container.attr('data-gs-width')) || 12, height: parseInt(this.container.attr('data-gs-height')) || 0, itemClass: 'grid-stack-item', @@ -589,11 +644,11 @@ _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), animate: Boolean(this.container.attr('data-gs-animate')) || false, alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: _.defaults(opts.resizable || {}, { + resizable: Utils.defaults(opts.resizable || {}, { autoHide: !(opts.alwaysShowResizeHandle || false), handles: 'se' }), - draggable: _.defaults(opts.draggable || {}, { + draggable: Utils.defaults(opts.draggable || {}, { handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || '.grid-stack-item-content', scroll: false, @@ -614,7 +669,7 @@ if (this.opts.ddPlugin === false) { this.opts.ddPlugin = GridStackDragDropPlugin; } else if (this.opts.ddPlugin === null) { - this.opts.ddPlugin = _.first(GridStackDragDropPlugin.registeredPlugins) || GridStackDragDropPlugin; + this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; } this.dd = new this.opts.ddPlugin(this); @@ -650,7 +705,7 @@ this.grid = new GridStackEngine(this.opts.width, function(nodes, detachNode) { detachNode = typeof detachNode === 'undefined' ? true : detachNode; var maxHeight = 0; - _.each(nodes, function(n) { + nodes.forEach(function(n) { if (detachNode && n._id === null) { if (n.el) { n.el.remove(); @@ -678,9 +733,9 @@ i: parseInt(el.attr('data-gs-x')) + parseInt(el.attr('data-gs-y')) * _this.opts.width }); }); - _.chain(elements).sortBy(function(x) { return x.i; }).each(function(i) { - self._prepareElement(i.el); - }).value(); + Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(i) { + this._prepareElement(i.el); + }, this); } this.setAnimation(this.opts.animate); @@ -691,7 +746,7 @@ this._updateContainerHeight(); - this._updateHeightsOnResize = _.throttle(function() { + this._updateHeightsOnResize = Utils.throttle(function() { self.cellHeight(self.cellWidth(), false); }, 100); @@ -708,7 +763,7 @@ oneColumnMode = true; self.grid._sortNodes(); - _.each(self.grid.nodes, function(node) { + self.grid.nodes.forEach(function(node) { self.container.append(node.el); if (self.opts.staticGrid) { @@ -731,7 +786,7 @@ return; } - _.each(self.grid.nodes, function(node) { + self.grid.nodes.forEach(function(node) { if (!node.noMove && !self.opts.disableDrag) { self.dd.draggable(node.el, 'enable'); } @@ -912,14 +967,14 @@ GridStack.prototype._triggerAddEvent = function() { if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { - this.container.trigger('added', [_.map(this.grid._addedNodes, _.clone)]); + this.container.trigger('added', [this.grid._addedNodes.map(Utils.clone)]); this.grid._addedNodes = []; } }; GridStack.prototype._triggerRemoveEvent = function() { if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { - this.container.trigger('removed', [_.map(this.grid._removedNodes, _.clone)]); + this.container.trigger('removed', [this.grid._removedNodes.map(Utils.clone)]); this.grid._removedNodes = []; } }; @@ -1324,9 +1379,9 @@ }; GridStack.prototype.removeAll = function(detachNode) { - _.each(this.grid.nodes, _.bind(function(node) { + this.grid.nodes.forEach(function(node) { this.removeWidget(node.el, detachNode); - }, this)); + }, this); this.grid.nodes = []; this._updateContainerHeight(); }; From 8eb803641b6b269bd932f07a1cf9e4a464b892f5 Mon Sep 17 00:00:00 2001 From: Ctibor Laky Date: Tue, 22 Aug 2017 15:18:47 +0200 Subject: [PATCH 0002/1298] links to docs --- doc/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.md b/doc/README.md index 6e4d231ec..363c3daed 100644 --- a/doc/README.md +++ b/doc/README.md @@ -90,12 +90,12 @@ gridstack.js API - `verticalMargin` - vertical gap size (default: `20`). Can be: - an integer (px) - a string (ex: '2em', '20px', '2rem') -- `width` - amount of columns (default: `12`) +- `width` - amount of columns (default: `12`). Setting non-default value must be supported by equivalent change in CSS, [see docs here](https://github.com/troolee/gridstack.js#change-grid-width). ## Grid attributes - `data-gs-animate` - turns animation on -- `data-gs-width` - amount of columns +- `data-gs-width` - amount of columns. Setting non-default value must be supported by equivalent change in CSS, [see docs here](https://github.com/troolee/gridstack.js#change-grid-width). - `data-gs-height` - maximum rows amount. Default is `0` which means no maximum rows. - `data-gs-current-height` - current rows amount. Set by the library only. Can be used by the CSS rules. From 386bc08646e006dd334f8c31d1821483f8c22719 Mon Sep 17 00:00:00 2001 From: Cristian Date: Thu, 19 Jul 2018 15:42:06 -0300 Subject: [PATCH 0003/1298] Fixed typo On `batchUpdate()` documentation, `Initializes` was incorrectly typed as `Initailizes`. --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index 10894af0c..ef8c2936d 100644 --- a/doc/README.md +++ b/doc/README.md @@ -243,7 +243,7 @@ grid.addWidget(el, 0, 0, 3, 2, true); ### batchUpdate() -Initailizes batch updates. You will see no changes until `commit` method is called. +Initializes batch updates. You will see no changes until `commit` method is called. ### cellHeight() From 20fa324073020adb520645c9e1cf97f8e71ecb1d Mon Sep 17 00:00:00 2001 From: Jaap Broekhuizen Date: Mon, 8 Oct 2018 09:21:08 +0200 Subject: [PATCH 0004/1298] Export on the correct scope for each environment. RequireJS and CommonJS now export on the `exports` module. `window` exports in these environments are now removed no longer available. Other environments still export on the `window`. --- dist/gridstack.all.js | 2 +- dist/gridstack.jQueryUI.js | 23 +++++++++++------------ dist/gridstack.jQueryUI.min.js | 2 +- dist/gridstack.js | 15 ++++++++------- dist/gridstack.min.js | 2 +- dist/gridstack.min.map | 2 +- src/gridstack.jQueryUI.js | 23 +++++++++++------------ src/gridstack.js | 11 ++++------- 8 files changed, 38 insertions(+), 42 deletions(-) diff --git a/dist/gridstack.all.js b/dist/gridstack.all.js index c4fb78e60..2ca060137 100644 --- a/dist/gridstack.all.js +++ b/dist/gridstack.all.js @@ -1,2 +1,2 @@ -!function(t){if("function"==typeof define&&define.amd)define(["jquery","lodash"],t);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(t){}try{_=require("lodash")}catch(t){}t(jQuery,_)}else t(jQuery,_)}(function(u,g){var t=window,e=function(t,e,i){var o=function(){return console.warn("gridstack.js: Function `"+e+"` is deprecated as of v0.2.5 and has been replaced with `"+i+"`. It will be **completely** removed in v1.0."),t.apply(this,arguments)};return o.prototype=t.prototype,o},d=function(t,e){console.warn("gridstack.js: Option `"+t+"` is deprecated as of v0.2.5 and has been replaced with `"+e+"`. It will be **completely** removed in v1.0.")},_={isIntercepted:function(t,e){return!(t.x+t.width<=e.x||e.x+e.width<=t.x||t.y+t.height<=e.y||e.y+e.height<=t.y)},sort:function(t,e,i){return i=i||g.chain(t).map(function(t){return t.x+t.width}).max().value(),e=-1!=e?1:-1,g.sortBy(t,[function(t){return e*(t.x+t.y*i)}])},createStylesheet:function(t){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.setAttribute("data-gs-style-id",t),e.styleSheet?e.styleSheet.cssText="":e.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(e),e.sheet},removeStylesheet:function(t){u("STYLE[data-gs-style-id="+t+"]").remove()},insertCSSRule:function(t,e,i,o){"function"==typeof t.insertRule?t.insertRule(e+"{"+i+"}",o):"function"==typeof t.addRule&&t.addRule(e,i,o)},toBool:function(t){return"boolean"==typeof t?t:"string"==typeof t?!(""===(t=t.toLowerCase())||"no"==t||"false"==t||"0"==t):Boolean(t)},_collisionNodeCheck:function(t){return t!=this.node&&_.isIntercepted(t,this.nn)},_didCollide:function(t){return _.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},t)},_isAddNodeIntercepted:function(t){return _.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},t)},parseHeight:function(t){var e=t,i="px";if(e&&g.isString(e)){var o=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!o)throw new Error("Invalid height");i=o[2]||"px",e=parseFloat(o[1])}return{height:e,unit:i}},removePositioningStyles:function(t){var e=t[0].style;e.position&&e.removeProperty("position"),e.left&&e.removeProperty("left"),e.top&&e.removeProperty("top"),e.width&&e.removeProperty("width"),e.height&&e.removeProperty("height")},getScrollParent:function(t){return null==t?null:t.scrollHeight>t.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(_._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},y.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},y.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},y.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},y.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(_._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},y.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},y.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},y.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},y.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},y.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},y.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},y.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},y.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight())},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;ot.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(_._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},y.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},y.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},y.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},y.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(_._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},y.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},y.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},y.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},y.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},y.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},y.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},y.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},y.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight(),"resize"==t.type&&u(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;ot.clientHeight?t:u.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var s=o.bottom-a,r=o.top,n=u.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(r)>Math.abs(i)?i:r:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(u._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},m.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},m.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},m.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},m.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++s,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(u._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},m.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},m.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var s,r=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!r)return!0;var n=new m(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?s=_.extend({},t):_.extend({},t)}));if(void 0===s)return!0;n.moveNode(s,t,i,o,a);var d=!0;return r&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=s&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},m.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new m(this.width,null,this.float,0,g.map(this.nodes,function(t){return _.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},m.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},m.prototype.moveNode=function(t,e,i,o,a,s){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var r=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,r),this._fixCollisions(t),s||(this._packNodes(),this._notify()),t},m.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},m.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},m.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=_(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},_(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=_(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=_(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=_(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),s=Math.max(0,a.x),r=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=s,o.y=r,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,s,r)&&(h.grid.moveNode(o,s,r),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=_(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=_(e.draggable),o=h.cellWidth(),a=h.cellHeight(),s=i.data("_gridstack_node"),r=s?s.width:Math.ceil(i.outerWidth()/o),n=s?s.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:r,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",s),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=_(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=_(e.draggable).data("_gridstack_node");i._grid=h;var o=_(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=_(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),_(e.helper).remove(),i.el=o,h.placeholder.hide(),u.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),_(e.draggable).unbind("drag",p),_(e.draggable).removeData("_gridstack_node"),_(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||s<0||!c.grid.float&&s>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,s=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",s).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,s,i,o)||l.lastTriedX===a&&l.lastTriedY===s&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=s,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,s,i,o),c._updateContainerHeight())},e=function(t,e){c.container.append(c.placeholder);var i=_(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=_(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(u.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(u.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){_(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=_(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:u.toBool(t.attr("data-gs-auto-position")),noResize:u.toBool(t.attr("data-gs-no-resize")),noMove:u.toBool(t.attr("data-gs-no-move")),locked:u.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,s,r,n,d,h,l){return t=_(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==s&&t.attr("data-gs-auto-position",s?"yes":null),void 0!==r&&t.attr("data-gs-min-width",r),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=_(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var s={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(s)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=_(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){_(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),u.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=_(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,s){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,s=null!=s?s:e.height,this.grid.moveNode(e,i,o,a,s)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=u.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=u.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,s=Math.floor(this.container.width()/this.opts.width),r=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/s),y:Math.floor(a/r)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;ot.clientHeight?t:u.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var s=o.bottom-a,r=o.top,n=u.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(r)>Math.abs(i)?i:r:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(u._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},m.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},m.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},m.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},m.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++s,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(u._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},m.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},m.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var s,r=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!r)return!0;var n=new m(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?s=_.extend({},t):_.extend({},t)}));if(void 0===s)return!0;n.moveNode(s,t,i,o,a);var d=!0;return r&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=s&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},m.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new m(this.width,null,this.float,0,g.map(this.nodes,function(t){return _.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},m.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},m.prototype.moveNode=function(t,e,i,o,a,s){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var r=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,r),this._fixCollisions(t),s||(this._packNodes(),this._notify()),t},m.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},m.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},m.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=_(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},_(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=_(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=_(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=_(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),s=Math.max(0,a.x),r=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=s,o.y=r,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,s,r)&&(h.grid.moveNode(o,s,r),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=_(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=_(e.draggable),o=h.cellWidth(),a=h.cellHeight(),s=i.data("_gridstack_node"),r=s?s.width:Math.ceil(i.outerWidth()/o),n=s?s.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:r,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",s),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=_(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=_(e.draggable).data("_gridstack_node");i._grid=h;var o=_(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=_(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),_(e.helper).remove(),i.el=o,h.placeholder.hide(),u.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),_(e.draggable).unbind("drag",p),_(e.draggable).removeData("_gridstack_node"),_(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||s<0||!c.grid.float&&s>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,s=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",s).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,s,i,o)||l.lastTriedX===a&&l.lastTriedY===s&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=s,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,s,i,o),c._updateContainerHeight(),"resize"==t.type&&_(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=_(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=_(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(u.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(u.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){_(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=_(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:u.toBool(t.attr("data-gs-auto-position")),noResize:u.toBool(t.attr("data-gs-no-resize")),noMove:u.toBool(t.attr("data-gs-no-move")),locked:u.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,s,r,n,d,h,l){return t=_(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==s&&t.attr("data-gs-auto-position",s?"yes":null),void 0!==r&&t.attr("data-gs-min-width",r),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=_(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var s={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(s)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=_(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){_(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),u.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=_(t)).each(function(t,e){var i=(e=_(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=_(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,s){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,s=null!=s?s:e.height,this.grid.moveNode(e,i,o,a,s)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=u.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=u.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,s=Math.floor(this.container.width()/this.opts.width),r=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/s),y:Math.floor(a/r)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;o Date: Mon, 8 Oct 2018 14:11:02 +0200 Subject: [PATCH 0005/1298] Make gridstack work with jquery-ui with new exports --- src/gridstack.jQueryUI.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index a088eac47..71c390e70 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -16,8 +16,8 @@ } else if (typeof exports !== 'undefined') { try { jQuery = require('jquery'); } catch (e) {} try { _ = require('lodash'); } catch (e) {} - try { GridStackUI = require('gridstack'); } catch (e) {} - factory(jQuery, _, GridStackUI, exports); + try { gridstack = require('gridstack'); } catch (e) {} + factory(jQuery, _, gridstack.GridStackUI, exports); } else { factory(jQuery, _, GridStackUI, window); } From 8710a019af77963482ee020c73059c1a55774545 Mon Sep 17 00:00:00 2001 From: Jaap Broekhuizen Date: Mon, 8 Oct 2018 14:14:59 +0200 Subject: [PATCH 0006/1298] Re-built gridstack with jqueryUI fix --- dist/gridstack.all.js | 2 +- dist/gridstack.jQueryUI.js | 4 ++-- dist/gridstack.jQueryUI.min.js | 2 +- dist/gridstack.min.map | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dist/gridstack.all.js b/dist/gridstack.all.js index 2ca060137..8c8cb1145 100644 --- a/dist/gridstack.all.js +++ b/dist/gridstack.all.js @@ -1,2 +1,2 @@ -!function(t){if("function"==typeof define&&define.amd)define(["jquery","lodash","exports"],t);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(t){}try{_=require("lodash")}catch(t){}t(jQuery,_,exports)}else t(jQuery,_,window)}(function(u,g,t){var e=function(t,e,i){var o=function(){return console.warn("gridstack.js: Function `"+e+"` is deprecated as of v0.2.5 and has been replaced with `"+i+"`. It will be **completely** removed in v1.0."),t.apply(this,arguments)};return o.prototype=t.prototype,o},d=function(t,e){console.warn("gridstack.js: Option `"+t+"` is deprecated as of v0.2.5 and has been replaced with `"+e+"`. It will be **completely** removed in v1.0.")},_={isIntercepted:function(t,e){return!(t.x+t.width<=e.x||e.x+e.width<=t.x||t.y+t.height<=e.y||e.y+e.height<=t.y)},sort:function(t,e,i){return i=i||g.chain(t).map(function(t){return t.x+t.width}).max().value(),e=-1!=e?1:-1,g.sortBy(t,[function(t){return e*(t.x+t.y*i)}])},createStylesheet:function(t){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.setAttribute("data-gs-style-id",t),e.styleSheet?e.styleSheet.cssText="":e.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(e),e.sheet},removeStylesheet:function(t){u("STYLE[data-gs-style-id="+t+"]").remove()},insertCSSRule:function(t,e,i,o){"function"==typeof t.insertRule?t.insertRule(e+"{"+i+"}",o):"function"==typeof t.addRule&&t.addRule(e,i,o)},toBool:function(t){return"boolean"==typeof t?t:"string"==typeof t?!(""===(t=t.toLowerCase())||"no"==t||"false"==t||"0"==t):Boolean(t)},_collisionNodeCheck:function(t){return t!=this.node&&_.isIntercepted(t,this.nn)},_didCollide:function(t){return _.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},t)},_isAddNodeIntercepted:function(t){return _.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},t)},parseHeight:function(t){var e=t,i="px";if(e&&g.isString(e)){var o=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!o)throw new Error("Invalid height");i=o[2]||"px",e=parseFloat(o[1])}return{height:e,unit:i}},removePositioningStyles:function(t){var e=t[0].style;e.position&&e.removeProperty("position"),e.left&&e.removeProperty("left"),e.top&&e.removeProperty("top"),e.width&&e.removeProperty("width"),e.height&&e.removeProperty("height")},getScrollParent:function(t){return null==t?null:t.scrollHeight>t.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(_._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},y.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},y.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},y.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},y.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(_._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},y.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},y.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},y.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},y.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},y.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},y.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},y.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},y.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight(),"resize"==t.type&&u(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;ot.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){g.chain(this.nodes).take(e).find(g.bind(_._didCollide,{n:t,newY:i})).value()||(t._dirty=!0,t.y=i),--i}},this)):g.each(this.nodes,g.bind(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},y.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},y.prototype.cleanNodes=function(){this._updateCounter||g.each(this.nodes,function(t){t._dirty=!1})},y.prototype.getDirtyNodes=function(){return g.filter(this.nodes,function(t){return t._dirty})},y.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!g.find(this.nodes,g.bind(_._isAddNodeIntercepted,{x:o,y:a,node:t}))){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(g.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},y.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(g.clone(t)),t._id=null,this.nodes=g.without(this.nodes,t),this._packNodes(),this._notify(t,e)},y.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(g.find(this.nodes,function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(g.find(n.nodes,function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},y.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new y(this.width,null,this.float,0,g.map(this.nodes,function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},y.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},y.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},y.prototype.getGridHeight=function(){return g.reduce(this.nodes,function(t,e){return Math.max(t,e.y+e.height)},0)},y.prototype.beginUpdate=function(t){g.each(this.nodes,function(t){t._origY=t.y}),t._updating=!0},y.prototype.endUpdate=function(){g.each(this.nodes,function(t){t._origY=t.y});var t=g.find(this.nodes,function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=g.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),g.each(h.grid.nodes,function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;g.each(h.grid.nodes,function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight(),"resize"==t.type&&u(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){g.each(this.grid.nodes,g.bind(function(t){this.removeWidget(t.el,e)},this)),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;o Date: Fri, 16 Nov 2018 10:31:08 -0500 Subject: [PATCH 0007/1298] Update README Indicate that Underscore is no longer supported due to upgrade to Lodash v4 https://github.com/gridstack/gridstack.js/issues/913#issuecomment-401164676 --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index ebedd6b2d..142e17aac 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,6 @@ Usage * [lodash.js](https://lodash.com) (>= 4.17.10, full build) * [jQuery](http://jquery.com) (>= 3.1.0) -Note: You can still use [underscore.js](http://underscorejs.org) (>= 1.7.0) instead of lodash.js - #### Using gridstack.js with jQuery UI * [jQuery UI](http://jqueryui.com) (>= 1.12.0). Minimum required components: Core, Widget, Mouse, Draggable, Resizable From e5f2a42877c7579901db5fc368495d69a84618ed Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:40:31 -0700 Subject: [PATCH 0008/1298] Update karma.conf.js --- karma.conf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index d8fcd440b..253cc9f55 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -15,8 +15,8 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ - 'bower_components/jquery/dist/jquery.min.js', - 'bower_components/jquery-ui/jquery-ui.min.js', + 'node_modules/jquery/dist/jquery.min.js', + 'node_modules/components-jqueryui/jquery-ui.min.js', 'node_modules/core-js/client/shim.min.js', 'src/gridstack.js', 'src/gridstack.jQueryUI.js', From 1eac26347b08ea3d17ed2bf9ac2fdf6c244c2a7f Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:42:31 -0700 Subject: [PATCH 0009/1298] Delete gridstack.all.js --- dist/gridstack.all.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 dist/gridstack.all.js diff --git a/dist/gridstack.all.js b/dist/gridstack.all.js deleted file mode 100644 index c18626c72..000000000 --- a/dist/gridstack.all.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t){if("function"==typeof define&&define.amd)define(["jquery","exports"],t);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(t){}t(jQuery,exports)}else t(jQuery,window)}(function(u,t){var e=function(t,e,i){var o=function(){return console.warn("gridstack.js: Function `"+e+"` is deprecated as of v0.2.5 and has been replaced with `"+i+"`. It will be **completely** removed in v1.0."),t.apply(this,arguments)};return o.prototype=t.prototype,o},d=function(t,e){console.warn("gridstack.js: Option `"+t+"` is deprecated as of v0.2.5 and has been replaced with `"+e+"`. It will be **completely** removed in v1.0.")},_={isIntercepted:function(t,e){return!(t.x+t.width<=e.x||e.x+e.width<=t.x||t.y+t.height<=e.y||e.y+e.height<=t.y)},sort:function(t,e,i){if(!i){var o=t.map(function(t){return t.x+t.width});i=Math.max.apply(Math,o)}return e=-1!=e?1:-1,_.sortBy(t,function(t){return e*(t.x+t.y*i)})},createStylesheet:function(t){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.setAttribute("data-gs-style-id",t),e.styleSheet?e.styleSheet.cssText="":e.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(e),e.sheet},removeStylesheet:function(t){u("STYLE[data-gs-style-id="+t+"]").remove()},insertCSSRule:function(t,e,i,o){"function"==typeof t.insertRule?t.insertRule(e+"{"+i+"}",o):"function"==typeof t.addRule&&t.addRule(e,i,o)},toBool:function(t){return"boolean"==typeof t?t:"string"==typeof t?!(""===(t=t.toLowerCase())||"no"==t||"false"==t||"0"==t):Boolean(t)},_collisionNodeCheck:function(t){return t!=this.node&&_.isIntercepted(t,this.nn)},_didCollide:function(t){return _.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},t)},_isAddNodeIntercepted:function(t){return _.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},t)},parseHeight:function(t){var e=t,i="px";if(e&&"string"==typeof e){var o=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!o)throw new Error("Invalid height");i=o[2]||"px",e=parseFloat(o[1])}return{height:e,unit:i}},without:function(t,e){var i=t.indexOf(e);return-1!==i&&(t=t.slice(0)).splice(i,1),t},sortBy:function(t,a){return t.slice(0).sort(function(t,e){var i=a(t),o=a(e);return o===i?0:ot.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){this.nodes.slice(0,e).find(_._didCollide,{n:t,newY:i})||(t._dirty=!0,t.y=i),--i}},this):this.nodes.forEach(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},c.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},c.prototype.cleanNodes=function(){this._updateCounter||this.nodes.forEach(function(t){t._dirty=!1})},c.prototype.getDirtyNodes=function(){return this.nodes.filter(function(t){return t._dirty})},c.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!this.nodes.find(_._isAddNodeIntercepted,{x:o,y:a,node:t})){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(_.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},c.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(_.clone(t)),t._id=null,this.nodes=_.without(this.nodes,t),this._packNodes(),this._notify(t,e)},c.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(this.nodes.find(function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new c(this.width,null,this.float,0,this.nodes.map(function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(n.nodes.find(function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},c.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new c(this.width,null,this.float,0,this.nodes.map(function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},c.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},c.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},c.prototype.getGridHeight=function(){return this.nodes.reduce(function(t,e){return Math.max(t,e.y+e.height)},0)},c.prototype.beginUpdate=function(t){this.nodes.forEach(function(t){t._origY=t.y}),t._updating=!0},c.prototype.endUpdate=function(){this.nodes.forEach(function(t){t._origY=t.y});var t=this.nodes.find(function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=_.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),h.grid.nodes.forEach(function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;h.grid.nodes.forEach(function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight(),"resize"==t.type&&u(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){this.grid.nodes.forEach(function(t){this.removeWidget(t.el,e)},this),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;o Date: Tue, 26 Mar 2019 08:42:42 -0700 Subject: [PATCH 0010/1298] Delete gridstack.jQueryUI.js --- dist/gridstack.jQueryUI.js | 93 -------------------------------------- 1 file changed, 93 deletions(-) delete mode 100644 dist/gridstack.jQueryUI.js diff --git a/dist/gridstack.jQueryUI.js b/dist/gridstack.jQueryUI.js deleted file mode 100644 index 1cc01ccbc..000000000 --- a/dist/gridstack.jQueryUI.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * gridstack.js 1.0.0-dev - * http://troolee.github.io/gridstack.js/ - * (c) 2014-2017 Pavel Reznikov, Dylan Weiss - * gridstack.js may be freely distributed under the MIT license. - * @preserve -*/ -(function(factory) { - if (typeof define === 'function' && define.amd) { - define(['jquery', 'gridstack', 'exports', 'jquery-ui/data', 'jquery-ui/disable-selection', - 'jquery-ui/focusable', 'jquery-ui/form', 'jquery-ui/ie', 'jquery-ui/keycode', 'jquery-ui/labels', - 'jquery-ui/jquery-1-7', 'jquery-ui/plugin', 'jquery-ui/safe-active-element', 'jquery-ui/safe-blur', - 'jquery-ui/scroll-parent', 'jquery-ui/tabbable', 'jquery-ui/unique-id', 'jquery-ui/version', - 'jquery-ui/widget', 'jquery-ui/widgets/mouse', 'jquery-ui/widgets/draggable', - 'jquery-ui/widgets/droppable', 'jquery-ui/widgets/resizable'], factory); - } else if (typeof exports !== 'undefined') { - try { jQuery = require('jquery'); } catch (e) {} - try { gridstack = require('gridstack'); } catch (e) {} - factory(jQuery, gridstack.GridStackUI, exports); - } else { - factory(jQuery, GridStackUI, window); - } -})(function($, GridStackUI, scope) { - /** - * @class JQueryUIGridStackDragDropPlugin - * jQuery UI implementation of drag'n'drop gridstack plugin. - */ - function JQueryUIGridStackDragDropPlugin(grid) { - GridStackUI.GridStackDragDropPlugin.call(this, grid); - } - - GridStackUI.GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - - JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStackUI.GridStackDragDropPlugin.prototype); - JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; - - JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.resizable(opts); - } else if (opts === 'option') { - var key = arguments[2]; - var value = arguments[3]; - el.resizable(opts, key, value); - } else { - var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') : - this.grid.opts.resizable.handles; - el.resizable($.extend({}, this.grid.opts.resizable, { - handles: handles - }, { - start: opts.start || function() {}, - stop: opts.stop || function() {}, - resize: opts.resize || function() {} - })); - } - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.draggable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.draggable(opts); - } else { - el.draggable($.extend({}, this.grid.opts.draggable, { - containment: this.grid.opts.isNested ? this.grid.container.parent() : null, - start: opts.start || function() {}, - stop: opts.stop || function() {}, - drag: opts.drag || function() {} - })); - } - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.droppable = function(el, opts) { - el = $(el); - el.droppable(opts); - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.isDroppable = function(el, opts) { - el = $(el); - return Boolean(el.data('droppable')); - }; - - JQueryUIGridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - $(el).on(eventName, callback); - return this; - }; - - scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; - - return JQueryUIGridStackDragDropPlugin; -}); From f05ff04145a606973c03bed5437ff9f46268a80a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:43:56 -0700 Subject: [PATCH 0011/1298] Delete gridstack.jQueryUI.min.js --- dist/gridstack.jQueryUI.min.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 dist/gridstack.jQueryUI.min.js diff --git a/dist/gridstack.jQueryUI.min.js b/dist/gridstack.jQueryUI.min.js deleted file mode 100644 index 55dbc7d59..000000000 --- a/dist/gridstack.jQueryUI.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e){if("function"==typeof define&&define.amd)define(["jquery","gridstack","exports","jquery-ui/data","jquery-ui/disable-selection","jquery-ui/focusable","jquery-ui/form","jquery-ui/ie","jquery-ui/keycode","jquery-ui/labels","jquery-ui/jquery-1-7","jquery-ui/plugin","jquery-ui/safe-active-element","jquery-ui/safe-blur","jquery-ui/scroll-parent","jquery-ui/tabbable","jquery-ui/unique-id","jquery-ui/version","jquery-ui/widget","jquery-ui/widgets/mouse","jquery-ui/widgets/draggable","jquery-ui/widgets/droppable","jquery-ui/widgets/resizable"],e);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(e){}try{gridstack=require("gridstack")}catch(e){}e(jQuery,gridstack.GridStackUI,exports)}else e(jQuery,GridStackUI,window)}(function(a,r,e){function i(e){r.GridStackDragDropPlugin.call(this,e)}return r.GridStackDragDropPlugin.registerPlugin(i),((i.prototype=Object.create(r.GridStackDragDropPlugin.prototype)).constructor=i).prototype.resizable=function(e,r){if(e=a(e),"disable"===r||"enable"===r)e.resizable(r);else if("option"===r){var i=arguments[2],t=arguments[3];e.resizable(r,i,t)}else{var u=e.data("gs-resize-handles")?e.data("gs-resize-handles"):this.grid.opts.resizable.handles;e.resizable(a.extend({},this.grid.opts.resizable,{handles:u},{start:r.start||function(){},stop:r.stop||function(){},resize:r.resize||function(){}}))}return this},i.prototype.draggable=function(e,r){return e=a(e),"disable"===r||"enable"===r?e.draggable(r):e.draggable(a.extend({},this.grid.opts.draggable,{containment:this.grid.opts.isNested?this.grid.container.parent():null,start:r.start||function(){},stop:r.stop||function(){},drag:r.drag||function(){}})),this},i.prototype.droppable=function(e,r){return(e=a(e)).droppable(r),this},i.prototype.isDroppable=function(e,r){return e=a(e),Boolean(e.data("droppable"))},i.prototype.on=function(e,r,i){return a(e).on(r,i),this},e.JQueryUIGridStackDragDropPlugin=i}); -//# sourceMappingURL=gridstack.min.map \ No newline at end of file From fa8edabc250d6d621577940e27a0c2f1e313f1a1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:44:05 -0700 Subject: [PATCH 0012/1298] Delete gridstack.js --- dist/gridstack.js | 1902 --------------------------------------------- 1 file changed, 1902 deletions(-) delete mode 100644 dist/gridstack.js diff --git a/dist/gridstack.js b/dist/gridstack.js deleted file mode 100644 index 195c4a19f..000000000 --- a/dist/gridstack.js +++ /dev/null @@ -1,1902 +0,0 @@ -/** - * gridstack.js 1.0.0-dev - * http://troolee.github.io/gridstack.js/ - * (c) 2014-2018 Pavel Reznikov, Dylan Weiss - * gridstack.js may be freely distributed under the MIT license. - * @preserve -*/ -(function(factory) { - if (typeof define === 'function' && define.amd) { - define(['jquery', 'exports'], factory); - } else if (typeof exports !== 'undefined') { - try { jQuery = require('jquery'); } catch (e) {} - factory(jQuery, exports); - } else { - factory(jQuery, window); - } -})(function($, scope) { - var obsolete = function(f, oldName, newName) { - var wrapper = function() { - console.warn('gridstack.js: Function `' + oldName + '` is deprecated as of v0.2.5 and has been replaced ' + - 'with `' + newName + '`. It will be **completely** removed in v1.0.'); - return f.apply(this, arguments); - }; - wrapper.prototype = f.prototype; - - return wrapper; - }; - - var obsoleteOpts = function(oldName, newName) { - console.warn('gridstack.js: Option `' + oldName + '` is deprecated as of v0.2.5 and has been replaced with `' + - newName + '`. It will be **completely** removed in v1.0.'); - }; - - var Utils = { - - isIntercepted: function(a, b) { - return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); - }, - - sort: function(nodes, dir, width) { - if (!width) { - var widths = nodes.map(function(node) { return node.x + node.width; }); - width = Math.max.apply(Math, widths); - } - - dir = dir != -1 ? 1 : -1; - return Utils.sortBy(nodes, function(n) { return dir * (n.x + n.y * width); }); - }, - - createStylesheet: function(id) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.setAttribute('data-gs-style-id', id); - if (style.styleSheet) { - style.styleSheet.cssText = ''; - } else { - style.appendChild(document.createTextNode('')); - } - document.getElementsByTagName('head')[0].appendChild(style); - return style.sheet; - }, - - removeStylesheet: function(id) { - $('STYLE[data-gs-style-id=' + id + ']').remove(); - }, - - insertCSSRule: function(sheet, selector, rules, index) { - if (typeof sheet.insertRule === 'function') { - sheet.insertRule(selector + '{' + rules + '}', index); - } else if (typeof sheet.addRule === 'function') { - sheet.addRule(selector, rules, index); - } - }, - - toBool: function(v) { - if (typeof v == 'boolean') { - return v; - } - if (typeof v == 'string') { - v = v.toLowerCase(); - return !(v === '' || v == 'no' || v == 'false' || v == '0'); - } - return Boolean(v); - }, - - _collisionNodeCheck: function(n) { - return n != this.node && Utils.isIntercepted(n, this.nn); - }, - - _didCollide: function(bn) { - return Utils.isIntercepted({x: this.n.x, y: this.newY, width: this.n.width, height: this.n.height}, bn); - }, - - _isAddNodeIntercepted: function(n) { - return Utils.isIntercepted({x: this.x, y: this.y, width: this.node.width, height: this.node.height}, n); - }, - - parseHeight: function(val) { - var height = val; - var heightUnit = 'px'; - if (height && typeof height === 'string') { - var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/); - if (!match) { - throw new Error('Invalid height'); - } - heightUnit = match[2] || 'px'; - height = parseFloat(match[1]); - } - return {height: height, unit: heightUnit}; - }, - - without: function(array, item) { - var index = array.indexOf(item); - - if (index !== -1) { - array = array.slice(0); - array.splice(index, 1); - } - - return array; - }, - - sortBy: function(array, getter) { - return array.slice(0).sort(function(left, right) { - var valueLeft = getter(left); - var valueRight = getter(right); - - if (valueRight === valueLeft) { - return 0; - } - - return valueLeft > valueRight ? 1 : -1; - }); - }, - - defaults: function(target) { - var sources = Array.prototype.slice.call(arguments, 1); - - sources.forEach(function(source) { - for (var prop in source) { - if (source.hasOwnProperty(prop) && !target.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - }); - - return target; - }, - - clone: function(target) { - return $.extend({}, target); - }, - - throttle: function(callback, delay) { - var isWaiting = false; - - return function() { - if (!isWaiting) { - callback.apply(this, arguments); - isWaiting = true; - setTimeout(function() { isWaiting = false; }, delay); - } - }; - }, - - removePositioningStyles: function(el) { - var style = el[0].style; - if (style.position) { - style.removeProperty('position'); - } - if (style.left) { - style.removeProperty('left'); - } - if (style.top) { - style.removeProperty('top'); - } - if (style.width) { - style.removeProperty('width'); - } - if (style.height) { - style.removeProperty('height'); - } - }, - getScrollParent: function(el) { - var returnEl; - if (el == null) { - returnEl = null; - } else if (el.scrollHeight > el.clientHeight) { - returnEl = el; - } else { - returnEl = Utils.getScrollParent(el.parentNode); - } - return returnEl; - }, - updateScrollPosition: function(el, ui, distance) { - // is widget in view? - var rect = el.getBoundingClientRect(); - var innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); - if (rect.top < 0 || - rect.bottom > innerHeightOrClientHeight - ) { - // set scrollTop of first parent that scrolls - // if parent is larger than el, set as low as possible - // to get entire widget on screen - var offsetDiffDown = rect.bottom - innerHeightOrClientHeight; - var offsetDiffUp = rect.top; - var scrollEl = Utils.getScrollParent(el); - if (scrollEl != null) { - var prevScroll = scrollEl.scrollTop; - if (rect.top < 0 && distance < 0) { - // moving up - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp; - } - } else if (distance > 0) { - // moving down - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown; - } - } - // move widget y by amount scrolled - ui.position.top += scrollEl.scrollTop - prevScroll; - } - } - } - }; - - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - Utils.is_intercepted = obsolete(Utils.isIntercepted, 'is_intercepted', 'isIntercepted'); - - Utils.create_stylesheet = obsolete(Utils.createStylesheet, 'create_stylesheet', 'createStylesheet'); - - Utils.remove_stylesheet = obsolete(Utils.removeStylesheet, 'remove_stylesheet', 'removeStylesheet'); - - Utils.insert_css_rule = obsolete(Utils.insertCSSRule, 'insert_css_rule', 'insertCSSRule'); - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - - /** - * @class GridStackDragDropPlugin - * Base class for drag'n'drop plugin. - */ - function GridStackDragDropPlugin(grid) { - this.grid = grid; - } - - GridStackDragDropPlugin.registeredPlugins = []; - - GridStackDragDropPlugin.registerPlugin = function(pluginClass) { - GridStackDragDropPlugin.registeredPlugins.push(pluginClass); - }; - - GridStackDragDropPlugin.prototype.resizable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.draggable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.droppable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.isDroppable = function(el) { - return false; - }; - - GridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - return this; - }; - - - var idSeq = 0; - - var GridStackEngine = function(width, onchange, floatMode, height, items) { - this.width = width; - this.float = floatMode || false; - this.height = height || 0; - - this.nodes = items || []; - this.onchange = onchange || function() {}; - - this._updateCounter = 0; - this._float = this.float; - - this._addedNodes = []; - this._removedNodes = []; - }; - - GridStackEngine.prototype.batchUpdate = function() { - this._updateCounter = 1; - this.float = true; - }; - - GridStackEngine.prototype.commit = function() { - if (this._updateCounter !== 0) { - this._updateCounter = 0; - this.float = this._float; - this._packNodes(); - this._notify(); - } - }; - - // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 - GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); - }; - - GridStackEngine.prototype._fixCollisions = function(node) { - var self = this; - this._sortNodes(-1); - - var nn = node; - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - if (!this.float && !hasLocked) { - nn = {x: 0, y: node.y, width: this.width, height: node.height}; - } - while (true) { - var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); - if (typeof collisionNode == 'undefined') { - return; - } - this.moveNode(collisionNode, collisionNode.x, node.y + node.height, - collisionNode.width, collisionNode.height, true); - } - }; - - GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { - var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; - var collisionNode = this.nodes.find(function(n) { - return Utils.isIntercepted(n, nn); - }); - return collisionNode === null || typeof collisionNode === 'undefined'; - }; - - GridStackEngine.prototype._sortNodes = function(dir) { - this.nodes = Utils.sort(this.nodes, dir, this.width); - }; - - GridStackEngine.prototype._packNodes = function() { - this._sortNodes(); - - if (this.float) { - this.nodes.forEach(function(n, i) { - if (n._updating || typeof n._origY == 'undefined' || n.y == n._origY) { - return; - } - - var newY = n.y; - while (newY >= n._origY) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - - if (!collisionNode) { - n._dirty = true; - n.y = newY; - } - --newY; - } - }, this); - } else { - this.nodes.forEach(function(n, i) { - if (n.locked) { - return; - } - while (n.y > 0) { - var newY = n.y - 1; - var canBeMoved = i === 0; - - if (i > 0) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - canBeMoved = typeof collisionNode == 'undefined'; - } - - if (!canBeMoved) { - break; - } - n._dirty = n.y != newY; - n.y = newY; - } - }, this); - } - }; - - GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = Utils.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); - - node.x = parseInt('' + node.x); - node.y = parseInt('' + node.y); - node.width = parseInt('' + node.width); - node.height = parseInt('' + node.height); - node.autoPosition = node.autoPosition || false; - node.noResize = node.noResize || false; - node.noMove = node.noMove || false; - - if (node.width > this.width) { - node.width = this.width; - } else if (node.width < 1) { - node.width = 1; - } - - if (node.height < 1) { - node.height = 1; - } - - if (node.x < 0) { - node.x = 0; - } - - if (node.x + node.width > this.width) { - if (resizing) { - node.width = this.width - node.x; - } else { - node.x = this.width - node.width; - } - } - - if (node.y < 0) { - node.y = 0; - } - - return node; - }; - - GridStackEngine.prototype._notify = function() { - var args = Array.prototype.slice.call(arguments, 0); - args[0] = typeof args[0] === 'undefined' ? [] : [args[0]]; - args[1] = typeof args[1] === 'undefined' ? true : args[1]; - if (this._updateCounter) { - return; - } - var deletedNodes = args[0].concat(this.getDirtyNodes()); - this.onchange(deletedNodes, args[1]); - }; - - GridStackEngine.prototype.cleanNodes = function() { - if (this._updateCounter) { - return; - } - this.nodes.forEach(function(n) { n._dirty = false; }); - }; - - GridStackEngine.prototype.getDirtyNodes = function() { - return this.nodes.filter(function(n) { return n._dirty; }); - }; - - GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { - node = this._prepareNode(node); - - if (typeof node.maxWidth != 'undefined') { node.width = Math.min(node.width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { node.height = Math.min(node.height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { node.width = Math.max(node.width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { node.height = Math.max(node.height, node.minHeight); } - - node._id = ++idSeq; - node._dirty = true; - - if (node.autoPosition) { - this._sortNodes(); - - for (var i = 0;; ++i) { - var x = i % this.width; - var y = Math.floor(i / this.width); - if (x + node.width > this.width) { - continue; - } - if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { - node.x = x; - node.y = y; - break; - } - } - } - - this.nodes.push(node); - if (typeof triggerAddEvent != 'undefined' && triggerAddEvent) { - this._addedNodes.push(Utils.clone(node)); - } - - this._fixCollisions(node); - this._packNodes(); - this._notify(); - return node; - }; - - GridStackEngine.prototype.removeNode = function(node, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - this._removedNodes.push(Utils.clone(node)); - node._id = null; - this.nodes = Utils.without(this.nodes, node); - this._packNodes(); - this._notify(node, detachNode); - }; - - GridStackEngine.prototype.canMoveNode = function(node, x, y, width, height) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return false; - } - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - - if (!this.height && !hasLocked) { - return true; - } - - var clonedNode; - var clone = new GridStackEngine( - this.width, - null, - this.float, - 0, - this.nodes.map(function(n) { - if (n == node) { - clonedNode = $.extend({}, n); - return clonedNode; - } - return $.extend({}, n); - })); - - if (typeof clonedNode === 'undefined') { - return true; - } - - clone.moveNode(clonedNode, x, y, width, height); - - var res = true; - - if (hasLocked) { - res &= !Boolean(clone.nodes.find(function(n) { - return n != clonedNode && Boolean(n.locked) && Boolean(n._dirty); - })); - } - if (this.height) { - res &= clone.getGridHeight() <= this.height; - } - - return res; - }; - - GridStackEngine.prototype.canBePlacedWithRespectToHeight = function(node) { - if (!this.height) { - return true; - } - - var clone = new GridStackEngine( - this.width, - null, - this.float, - 0, - this.nodes.map(function(n) { return $.extend({}, n); })); - clone.addNode(node); - return clone.getGridHeight() <= this.height; - }; - - GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) { - if (typeof x != 'number') { x = node.x; } - if (typeof y != 'number') { y = node.y; } - if (typeof width != 'number') { width = node.width; } - if (typeof height != 'number') { height = node.height; } - - if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } - - if (node.x == x && node.y == y && node.width == width && node.height == height) { - return false; - } - return true; - }; - - GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return node; - } - if (typeof x != 'number') { x = node.x; } - if (typeof y != 'number') { y = node.y; } - if (typeof width != 'number') { width = node.width; } - if (typeof height != 'number') { height = node.height; } - - if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } - - if (node.x == x && node.y == y && node.width == width && node.height == height) { - return node; - } - - var resizing = node.width != width; - node._dirty = true; - - node.x = x; - node.y = y; - node.width = width; - node.height = height; - - node.lastTriedX = x; - node.lastTriedY = y; - node.lastTriedWidth = width; - node.lastTriedHeight = height; - - node = this._prepareNode(node, resizing); - - this._fixCollisions(node); - if (!noPack) { - this._packNodes(); - this._notify(); - } - return node; - }; - - GridStackEngine.prototype.getGridHeight = function() { - return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); - }; - - GridStackEngine.prototype.beginUpdate = function(node) { - this.nodes.forEach(function(n) { - n._origY = n.y; - }); - node._updating = true; - }; - - GridStackEngine.prototype.endUpdate = function() { - this.nodes.forEach(function(n) { - n._origY = n.y; - }); - var n = this.nodes.find(function(n) { return n._updating; }); - if (n) { - n._updating = false; - } - }; - - var GridStack = function(el, opts) { - var self = this; - var oneColumnMode, isAutoCellHeight; - - opts = opts || {}; - - this.container = $(el); - - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - if (typeof opts.handle_class !== 'undefined') { - opts.handleClass = opts.handle_class; - obsoleteOpts('handle_class', 'handleClass'); - } - if (typeof opts.item_class !== 'undefined') { - opts.itemClass = opts.item_class; - obsoleteOpts('item_class', 'itemClass'); - } - if (typeof opts.placeholder_class !== 'undefined') { - opts.placeholderClass = opts.placeholder_class; - obsoleteOpts('placeholder_class', 'placeholderClass'); - } - if (typeof opts.placeholder_text !== 'undefined') { - opts.placeholderText = opts.placeholder_text; - obsoleteOpts('placeholder_text', 'placeholderText'); - } - if (typeof opts.cell_height !== 'undefined') { - opts.cellHeight = opts.cell_height; - obsoleteOpts('cell_height', 'cellHeight'); - } - if (typeof opts.vertical_margin !== 'undefined') { - opts.verticalMargin = opts.vertical_margin; - obsoleteOpts('vertical_margin', 'verticalMargin'); - } - if (typeof opts.min_width !== 'undefined') { - opts.minWidth = opts.min_width; - obsoleteOpts('min_width', 'minWidth'); - } - if (typeof opts.static_grid !== 'undefined') { - opts.staticGrid = opts.static_grid; - obsoleteOpts('static_grid', 'staticGrid'); - } - if (typeof opts.is_nested !== 'undefined') { - opts.isNested = opts.is_nested; - obsoleteOpts('is_nested', 'isNested'); - } - if (typeof opts.always_show_resize_handle !== 'undefined') { - opts.alwaysShowResizeHandle = opts.always_show_resize_handle; - obsoleteOpts('always_show_resize_handle', 'alwaysShowResizeHandle'); - } - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - - opts.itemClass = opts.itemClass || 'grid-stack-item'; - var isNested = this.container.closest('.' + opts.itemClass).length > 0; - - this.opts = Utils.defaults(opts || {}, { - width: parseInt(this.container.attr('data-gs-width')) || 12, - height: parseInt(this.container.attr('data-gs-height')) || 0, - itemClass: 'grid-stack-item', - placeholderClass: 'grid-stack-placeholder', - placeholderText: '', - handle: '.grid-stack-item-content', - handleClass: null, - cellHeight: 60, - verticalMargin: 20, - auto: true, - minWidth: 768, - float: false, - staticGrid: false, - _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), - animate: Boolean(this.container.attr('data-gs-animate')) || false, - alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: Utils.defaults(opts.resizable || {}, { - autoHide: !(opts.alwaysShowResizeHandle || false), - handles: 'se' - }), - draggable: Utils.defaults(opts.draggable || {}, { - handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || - '.grid-stack-item-content', - scroll: false, - appendTo: 'body' - }), - disableDrag: opts.disableDrag || false, - disableResize: opts.disableResize || false, - rtl: 'auto', - removable: false, - removableOptions: Utils.defaults(opts.removableOptions || {}, { - accept: '.' + opts.itemClass - }), - removeTimeout: 2000, - verticalMarginUnit: 'px', - cellHeightUnit: 'px', - disableOneColumnMode: opts.disableOneColumnMode || false, - oneColumnModeClass: opts.oneColumnModeClass || 'grid-stack-one-column-mode', - ddPlugin: null - }); - - if (this.opts.ddPlugin === false) { - this.opts.ddPlugin = GridStackDragDropPlugin; - } else if (this.opts.ddPlugin === null) { - this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; - } - - this.dd = new this.opts.ddPlugin(this); - - if (this.opts.rtl === 'auto') { - this.opts.rtl = this.container.css('direction') === 'rtl'; - } - - if (this.opts.rtl) { - this.container.addClass('grid-stack-rtl'); - } - - this.opts.isNested = isNested; - - isAutoCellHeight = this.opts.cellHeight === 'auto'; - if (isAutoCellHeight) { - self.cellHeight(self.cellWidth(), true); - } else { - this.cellHeight(this.opts.cellHeight, true); - } - this.verticalMargin(this.opts.verticalMargin, true); - - this.container.addClass(this.opts._class); - - this._setStaticClass(); - - if (isNested) { - this.container.addClass('grid-stack-nested'); - } - - this._initStyles(); - - this.grid = new GridStackEngine(this.opts.width, function(nodes, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - var maxHeight = 0; - this.nodes.forEach(function(n) { - maxHeight = Math.max(maxHeight, n.y + n.height); - }); - nodes.forEach(function(n) { - if (detachNode && n._id === null) { - if (n.el) { - n.el.remove(); - } - } else { - n.el - .attr('data-gs-x', n.x) - .attr('data-gs-y', n.y) - .attr('data-gs-width', n.width) - .attr('data-gs-height', n.height); - } - }); - self._updateStyles(maxHeight + 10); - }, this.opts.float, this.opts.height); - - if (this.opts.auto) { - var elements = []; - var _this = this; - this.container.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') - .each(function(index, el) { - el = $(el); - elements.push({ - el: el, - i: parseInt(el.attr('data-gs-x')) + parseInt(el.attr('data-gs-y')) * _this.opts.width - }); - }); - Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(i) { - this._prepareElement(i.el); - }, this); - } - - this.setAnimation(this.opts.animate); - - this.placeholder = $( - '
' + - '
' + this.opts.placeholderText + '
').hide(); - - this._updateContainerHeight(); - - this._updateHeightsOnResize = Utils.throttle(function() { - self.cellHeight(self.cellWidth(), false); - }, 100); - - this.onResizeHandler = function() { - if (isAutoCellHeight) { - self._updateHeightsOnResize(); - } - - if (self._isOneColumnMode() && !self.opts.disableOneColumnMode) { - if (oneColumnMode) { - return; - } - self.container.addClass(self.opts.oneColumnModeClass); - oneColumnMode = true; - - self.grid._sortNodes(); - self.grid.nodes.forEach(function(node) { - self.container.append(node.el); - - if (self.opts.staticGrid) { - return; - } - self.dd.draggable(node.el, 'disable'); - self.dd.resizable(node.el, 'disable'); - - node.el.trigger('resize'); - }); - } else { - if (!oneColumnMode) { - return; - } - - self.container.removeClass(self.opts.oneColumnModeClass); - oneColumnMode = false; - - if (self.opts.staticGrid) { - return; - } - - self.grid.nodes.forEach(function(node) { - if (!node.noMove && !self.opts.disableDrag) { - self.dd.draggable(node.el, 'enable'); - } - if (!node.noResize && !self.opts.disableResize) { - self.dd.resizable(node.el, 'enable'); - } - - node.el.trigger('resize'); - }); - } - }; - - $(window).resize(this.onResizeHandler); - this.onResizeHandler(); - - if (!self.opts.staticGrid && typeof self.opts.removable === 'string') { - var trashZone = $(self.opts.removable); - if (!this.dd.isDroppable(trashZone)) { - this.dd.droppable(trashZone, self.opts.removableOptions); - } - this.dd - .on(trashZone, 'dropover', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (node._grid !== self) { - return; - } - el.data('inTrashZone', true); - self._setupRemovingTimeout(el); - }) - .on(trashZone, 'dropout', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (node._grid !== self) { - return; - } - el.data('inTrashZone', false); - self._clearRemovingTimeout(el); - }); - } - - if (!self.opts.staticGrid && self.opts.acceptWidgets) { - var draggingElement = null; - - var onDrag = function(event, ui) { - var el = draggingElement; - var node = el.data('_gridstack_node'); - var pos = self.getCellFromPixel({left: event.pageX, top: event.pageY}, true); - var x = Math.max(0, pos.x); - var y = Math.max(0, pos.y); - if (!node._added) { - node._added = true; - - node.el = el; - node.autoPosition = true; - node.x = x; - node.y = y; - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - self.grid.addNode(node); - - self.container.append(self.placeholder); - self.placeholder - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .show(); - node.el = self.placeholder; - node._beforeDragX = node.x; - node._beforeDragY = node.y; - - self._updateContainerHeight(); - } - if (!self.grid.canMoveNode(node, x, y)) { - return; - } - self.grid.moveNode(node, x, y); - self._updateContainerHeight(); - }; - - this.dd - .droppable(self.container, { - accept: function(el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (node && node._grid === self) { - return false; - } - return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets); - } - }) - .on(self.container, 'dropover', function(event, ui) { - var offset = self.container.offset(); - var el = $(ui.draggable); - var cellWidth = self.cellWidth(); - var cellHeight = self.cellHeight(); - var origNode = el.data('_gridstack_node'); - - var width = origNode ? origNode.width : (Math.ceil(el.outerWidth() / cellWidth)); - var height = origNode ? origNode.height : (Math.ceil(el.outerHeight() / cellHeight)); - - draggingElement = el; - - var node = self.grid._prepareNode({width: width, height: height, _added: false, _temporary: true}); - el.data('_gridstack_node', node); - el.data('_gridstack_node_orig', origNode); - - el.on('drag', onDrag); - }) - .on(self.container, 'dropout', function(event, ui) { - var el = $(ui.draggable); - if (!el.data('_gridstack_node')) { - return; - } - el.unbind('drag', onDrag); - var node = el.data('_gridstack_node'); - node.el = null; - self.grid.removeNode(node); - self.placeholder.detach(); - self._updateContainerHeight(); - el.data('_gridstack_node', el.data('_gridstack_node_orig')); - }) - .on(self.container, 'drop', function(event, ui) { - self.placeholder.detach(); - - var node = $(ui.draggable).data('_gridstack_node'); - node._grid = self; - var el = $(ui.draggable).clone(false); - el.data('_gridstack_node', node); - var originalNode = $(ui.draggable).data('_gridstack_node_orig'); - if (typeof originalNode !== 'undefined' && typeof originalNode._grid !== 'undefined') { - originalNode._grid._triggerRemoveEvent(); - } - $(ui.helper).remove(); - node.el = el; - self.placeholder.hide(); - Utils.removePositioningStyles(el); - el.find('div.ui-resizable-handle').remove(); - - el - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .addClass(self.opts.itemClass) - .enableSelection() - .removeData('draggable') - .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') - .unbind('drag', onDrag); - self.container.append(el); - self._prepareElementsByNode(el, node); - self._updateContainerHeight(); - self.grid._addedNodes.push(node); - self._triggerAddEvent(); - self._triggerChangeEvent(); - - self.grid.endUpdate(); - $(ui.draggable).unbind('drag', onDrag); - $(ui.draggable).removeData('_gridstack_node'); - $(ui.draggable).removeData('_gridstack_node_orig'); - self.container.trigger('dropped', [originalNode, node]); - }); - } - }; - - GridStack.prototype._triggerChangeEvent = function(forceTrigger) { - var elements = this.grid.getDirtyNodes(); - var hasChanges = false; - - var eventParams = []; - if (elements && elements.length) { - eventParams.push(elements); - hasChanges = true; - } - - if (hasChanges || forceTrigger === true) { - this.container.trigger('change', eventParams); - } - }; - - GridStack.prototype._triggerAddEvent = function() { - if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { - this.container.trigger('added', [this.grid._addedNodes.map(Utils.clone)]); - this.grid._addedNodes = []; - } - }; - - GridStack.prototype._triggerRemoveEvent = function() { - if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { - this.container.trigger('removed', [this.grid._removedNodes.map(Utils.clone)]); - this.grid._removedNodes = []; - } - }; - - GridStack.prototype._initStyles = function() { - if (this._stylesId) { - Utils.removeStylesheet(this._stylesId); - } - this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); - this._styles = Utils.createStylesheet(this._stylesId); - if (this._styles !== null) { - this._styles._max = 0; - } - }; - - GridStack.prototype._updateStyles = function(maxHeight) { - if (this._styles === null || typeof this._styles === 'undefined') { - return; - } - - var prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; - var self = this; - var getHeight; - - if (typeof maxHeight == 'undefined') { - maxHeight = this._styles._max; - } - this._initStyles(); - this._updateContainerHeight(); - if (!this.opts.cellHeight) { // The rest will be handled by CSS - return ; - } - if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep this._styles._max increasing - return ; - } - - if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - getHeight = function(nbRows, nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - }; - } else { - getHeight = function(nbRows, nbMargins) { - if (!nbRows || !nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - } - return 'calc(' + ((self.opts.cellHeight * nbRows) + self.opts.cellHeightUnit) + ' + ' + - ((self.opts.verticalMargin * nbMargins) + self.opts.verticalMarginUnit) + ')'; - }; - } - - if (this._styles._max === 0) { - Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); - } - - if (maxHeight > this._styles._max) { - for (var i = this._styles._max; i < maxHeight; ++i) { - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-height="' + (i + 1) + '"]', - 'height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-min-height="' + (i + 1) + '"]', - 'min-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-max-height="' + (i + 1) + '"]', - 'max-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-y="' + i + '"]', - 'top: ' + getHeight(i, i) + ';', - i - ); - } - this._styles._max = maxHeight; - } - }; - - GridStack.prototype._updateContainerHeight = function() { - if (this.grid._updateCounter) { - return; - } - var height = this.grid.getGridHeight(); - // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below - var cssMinHeight = parseInt(this.container.css('min-height')); - if (cssMinHeight > 0) { - var minHeight = (cssMinHeight + this.opts.verticalMargin) / (this.cellHeight() + this.opts.verticalMargin); - if (height < minHeight) { - height = minHeight; - } - } - this.container.attr('data-gs-current-height', height); - if (!this.opts.cellHeight) { - return ; - } - if (!this.opts.verticalMargin) { - this.container.css('height', (height * (this.opts.cellHeight)) + this.opts.cellHeightUnit); - } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - this.container.css('height', (height * (this.opts.cellHeight + this.opts.verticalMargin) - - this.opts.verticalMargin) + this.opts.cellHeightUnit); - } else { - this.container.css('height', 'calc(' + ((height * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + - ' + ' + ((height * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); - } - }; - - GridStack.prototype._isOneColumnMode = function() { - return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= - this.opts.minWidth; - }; - - GridStack.prototype._setupRemovingTimeout = function(el) { - var self = this; - var node = $(el).data('_gridstack_node'); - - if (node._removeTimeout || !self.opts.removable) { - return; - } - node._removeTimeout = setTimeout(function() { - el.addClass('grid-stack-item-removing'); - node._isAboutToRemove = true; - }, self.opts.removeTimeout); - }; - - GridStack.prototype._clearRemovingTimeout = function(el) { - var node = $(el).data('_gridstack_node'); - - if (!node._removeTimeout) { - return; - } - clearTimeout(node._removeTimeout); - node._removeTimeout = null; - el.removeClass('grid-stack-item-removing'); - node._isAboutToRemove = false; - }; - - GridStack.prototype._prepareElementsByNode = function(el, node) { - var self = this; - - var cellWidth; - var cellHeight; - - var dragOrResize = function(event, ui) { - var x = Math.round(ui.position.left / cellWidth); - var y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); - var width; - var height; - - if (event.type != 'drag') { - width = Math.round(ui.size.width / cellWidth); - height = Math.round(ui.size.height / cellHeight); - } - - if (event.type == 'drag') { - var distance = ui.position.top - node._prevYPix; - node._prevYPix = ui.position.top; - Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.grid.width || y < 0 || - (!self.grid.float && y > self.grid.getGridHeight())) { - if (!node._temporaryRemoved) { - if (self.opts.removable === true) { - self._setupRemovingTimeout(el); - } - - x = node._beforeDragX; - y = node._beforeDragY; - - self.placeholder.detach(); - self.placeholder.hide(); - self.grid.removeNode(node); - self._updateContainerHeight(); - - node._temporaryRemoved = true; - } else { - return; - } - } else { - self._clearRemovingTimeout(el); - - if (node._temporaryRemoved) { - self.grid.addNode(node); - self.placeholder - .attr('data-gs-x', x) - .attr('data-gs-y', y) - .attr('data-gs-width', width) - .attr('data-gs-height', height) - .show(); - self.container.append(self.placeholder); - node.el = self.placeholder; - node._temporaryRemoved = false; - } - } - } else if (event.type == 'resize') { - if (x < 0) { - return; - } - } - // width and height are undefined if not resizing - var lastTriedWidth = typeof width !== 'undefined' ? width : node.lastTriedWidth; - var lastTriedHeight = typeof height !== 'undefined' ? height : node.lastTriedHeight; - if (!self.grid.canMoveNode(node, x, y, width, height) || - (node.lastTriedX === x && node.lastTriedY === y && - node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) { - return; - } - node.lastTriedX = x; - node.lastTriedY = y; - node.lastTriedWidth = width; - node.lastTriedHeight = height; - self.grid.moveNode(node, x, y, width, height); - self._updateContainerHeight(); - - if (event.type == 'resize') { - $(event.target).trigger('gsresize', node); - } - }; - - var onStartMoving = function(event, ui) { - self.container.append(self.placeholder); - var o = $(this); - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - cellWidth = self.cellWidth(); - var strictCellHeight = Math.ceil(o.outerHeight() / o.attr('data-gs-height')); - cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); - self.placeholder - .attr('data-gs-x', o.attr('data-gs-x')) - .attr('data-gs-y', o.attr('data-gs-y')) - .attr('data-gs-width', o.attr('data-gs-width')) - .attr('data-gs-height', o.attr('data-gs-height')) - .show(); - node.el = self.placeholder; - node._beforeDragX = node.x; - node._beforeDragY = node.y; - node._prevYPix = ui.position.top; - - self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - self.dd.resizable(el, 'option', 'minHeight', strictCellHeight * (node.minHeight || 1)); - - if (event.type == 'resizestart') { - o.find('.grid-stack-item').trigger('resizestart'); - } - }; - - var onEndMoving = function(event, ui) { - var o = $(this); - if (!o.data('_gridstack_node')) { - return; - } - - var forceNotify = false; - self.placeholder.detach(); - node.el = o; - self.placeholder.hide(); - - if (node._isAboutToRemove) { - forceNotify = true; - var gridToNotify = el.data('_gridstack_node')._grid; - gridToNotify._triggerRemoveEvent(); - el.removeData('_gridstack_node'); - el.remove(); - } else { - self._clearRemovingTimeout(el); - if (!node._temporaryRemoved) { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - } else { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node._beforeDragX) - .attr('data-gs-y', node._beforeDragY) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - node.x = node._beforeDragX; - node.y = node._beforeDragY; - node._temporaryRemoved = false; - self.grid.addNode(node); - } - } - self._updateContainerHeight(); - self._triggerChangeEvent(forceNotify); - - self.grid.endUpdate(); - - var nestedGrids = o.find('.grid-stack'); - if (nestedGrids.length && event.type == 'resizestop') { - nestedGrids.each(function(index, el) { - $(el).data('gridstack').onResizeHandler(); - }); - o.find('.grid-stack-item').trigger('resizestop'); - o.find('.grid-stack-item').trigger('gsresizestop'); - } - if (event.type == 'resizestop') { - self.container.trigger('gsresizestop', o); - } - }; - - this.dd - .draggable(el, { - start: onStartMoving, - stop: onEndMoving, - drag: dragOrResize - }) - .resizable(el, { - start: onStartMoving, - stop: onEndMoving, - resize: dragOrResize - }); - - if (node.noMove || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableDrag || - this.opts.staticGrid) { - this.dd.draggable(el, 'disable'); - } - - if (node.noResize || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableResize || - this.opts.staticGrid) { - this.dd.resizable(el, 'disable'); - } - - el.attr('data-gs-locked', node.locked ? 'yes' : null); - }; - - GridStack.prototype._prepareElement = function(el, triggerAddEvent) { - triggerAddEvent = typeof triggerAddEvent != 'undefined' ? triggerAddEvent : false; - var self = this; - el = $(el); - - el.addClass(this.opts.itemClass); - var node = self.grid.addNode({ - x: parseInt(el.attr('data-gs-x'), 10), - y: parseInt(el.attr('data-gs-y'), 10), - width: el.attr('data-gs-width'), - height: el.attr('data-gs-height'), - maxWidth: el.attr('data-gs-max-width'), - minWidth: el.attr('data-gs-min-width'), - maxHeight: el.attr('data-gs-max-height'), - minHeight: el.attr('data-gs-min-height'), - autoPosition: Utils.toBool(el.attr('data-gs-auto-position')), - noResize: Utils.toBool(el.attr('data-gs-no-resize')), - noMove: Utils.toBool(el.attr('data-gs-no-move')), - locked: Utils.toBool(el.attr('data-gs-locked')), - resizeHandles: el.attr('data-gs-resize-handles'), - el: el, - id: el.attr('data-gs-id'), - _grid: self - }, triggerAddEvent); - el.data('_gridstack_node', node); - - this._prepareElementsByNode(el, node); - }; - - GridStack.prototype.setAnimation = function(enable) { - if (enable) { - this.container.addClass('grid-stack-animate'); - } else { - this.container.removeClass('grid-stack-animate'); - } - }; - - GridStack.prototype.addWidget = function(el, x, y, width, height, autoPosition, minWidth, maxWidth, - minHeight, maxHeight, id) { - el = $(el); - if (typeof x != 'undefined') { el.attr('data-gs-x', x); } - if (typeof y != 'undefined') { el.attr('data-gs-y', y); } - if (typeof width != 'undefined') { el.attr('data-gs-width', width); } - if (typeof height != 'undefined') { el.attr('data-gs-height', height); } - if (typeof autoPosition != 'undefined') { el.attr('data-gs-auto-position', autoPosition ? 'yes' : null); } - if (typeof minWidth != 'undefined') { el.attr('data-gs-min-width', minWidth); } - if (typeof maxWidth != 'undefined') { el.attr('data-gs-max-width', maxWidth); } - if (typeof minHeight != 'undefined') { el.attr('data-gs-min-height', minHeight); } - if (typeof maxHeight != 'undefined') { el.attr('data-gs-max-height', maxHeight); } - if (typeof id != 'undefined') { el.attr('data-gs-id', id); } - this.container.append(el); - this._prepareElement(el, true); - this._triggerAddEvent(); - this._updateContainerHeight(); - this._triggerChangeEvent(true); - - return el; - }; - - GridStack.prototype.makeWidget = function(el) { - el = $(el); - this._prepareElement(el, true); - this._triggerAddEvent(); - this._updateContainerHeight(); - this._triggerChangeEvent(true); - - return el; - }; - - GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) { - var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; - return this.grid.canBePlacedWithRespectToHeight(node); - }; - - GridStack.prototype.removeWidget = function(el, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - el = $(el); - var node = el.data('_gridstack_node'); - - // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 - if (!node) { - node = this.grid.getNodeDataByDOMEl(el); - } - - this.grid.removeNode(node, detachNode); - el.removeData('_gridstack_node'); - this._updateContainerHeight(); - if (detachNode) { - el.remove(); - } - this._triggerChangeEvent(true); - this._triggerRemoveEvent(); - }; - - GridStack.prototype.removeAll = function(detachNode) { - this.grid.nodes.forEach(function(node) { - this.removeWidget(node.el, detachNode); - }, this); - this.grid.nodes = []; - this._updateContainerHeight(); - }; - - GridStack.prototype.destroy = function(detachGrid) { - $(window).off('resize', this.onResizeHandler); - this.disable(); - if (typeof detachGrid != 'undefined' && !detachGrid) { - this.removeAll(false); - this.container.removeData('gridstack'); - } else { - this.container.remove(); - } - Utils.removeStylesheet(this._stylesId); - if (this.grid) { - this.grid = null; - } - }; - - GridStack.prototype.resizable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.noResize = !(val || false); - if (node.noResize || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { - self.dd.resizable(el, 'disable'); - } else { - self.dd.resizable(el, 'enable'); - } - }); - return this; - }; - - GridStack.prototype.movable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.noMove = !(val || false); - if (node.noMove || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { - self.dd.draggable(el, 'disable'); - el.removeClass('ui-draggable-handle'); - } else { - self.dd.draggable(el, 'enable'); - el.addClass('ui-draggable-handle'); - } - }); - return this; - }; - - GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) { - this.movable(this.container.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableDrag = !doEnable; - } - }; - - GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) { - this.resizable(this.container.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableResize = !doEnable; - } - }; - - GridStack.prototype.disable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), false); - this.resizable(this.container.children('.' + this.opts.itemClass), false); - this.container.trigger('disable'); - }; - - GridStack.prototype.enable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), true); - this.resizable(this.container.children('.' + this.opts.itemClass), true); - this.container.trigger('enable'); - }; - - GridStack.prototype.locked = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.locked = (val || false); - el.attr('data-gs-locked', node.locked ? 'yes' : null); - }); - return this; - }; - - GridStack.prototype.maxHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.maxHeight = (val || false); - el.attr('data-gs-max-height', val); - } - }); - return this; - }; - - GridStack.prototype.minHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.minHeight = (val || false); - el.attr('data-gs-min-height', val); - } - }); - return this; - }; - - GridStack.prototype.maxWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.maxWidth = (val || false); - el.attr('data-gs-max-width', val); - } - }); - return this; - }; - - GridStack.prototype.minWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.minWidth = (val || false); - el.attr('data-gs-min-width', val); - } - }); - return this; - }; - - GridStack.prototype._updateElement = function(el, callback) { - el = $(el).first(); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - var self = this; - - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - - callback.call(this, el, node); - - self._updateContainerHeight(); - self._triggerChangeEvent(); - - self.grid.endUpdate(); - }; - - GridStack.prototype.resize = function(el, width, height) { - this._updateElement(el, function(el, node) { - width = (width !== null && typeof width != 'undefined') ? width : node.width; - height = (height !== null && typeof height != 'undefined') ? height : node.height; - - this.grid.moveNode(node, node.x, node.y, width, height); - }); - }; - - GridStack.prototype.move = function(el, x, y) { - this._updateElement(el, function(el, node) { - x = (x !== null && typeof x != 'undefined') ? x : node.x; - y = (y !== null && typeof y != 'undefined') ? y : node.y; - - this.grid.moveNode(node, x, y, node.width, node.height); - }); - }; - - GridStack.prototype.update = function(el, x, y, width, height) { - this._updateElement(el, function(el, node) { - x = (x !== null && typeof x != 'undefined') ? x : node.x; - y = (y !== null && typeof y != 'undefined') ? y : node.y; - width = (width !== null && typeof width != 'undefined') ? width : node.width; - height = (height !== null && typeof height != 'undefined') ? height : node.height; - - this.grid.moveNode(node, x, y, width, height); - }); - }; - - GridStack.prototype.verticalMargin = function(val, noUpdate) { - if (typeof val == 'undefined') { - return this.opts.verticalMargin; - } - - var heightData = Utils.parseHeight(val); - - if (this.opts.verticalMarginUnit === heightData.unit && this.opts.height === heightData.height) { - return ; - } - this.opts.verticalMarginUnit = heightData.unit; - this.opts.verticalMargin = heightData.height; - - if (!noUpdate) { - this._updateStyles(); - } - }; - - GridStack.prototype.cellHeight = function(val, noUpdate) { - if (typeof val == 'undefined') { - if (this.opts.cellHeight) { - return this.opts.cellHeight; - } - var o = this.container.children('.' + this.opts.itemClass).first(); - return Math.ceil(o.outerHeight() / o.attr('data-gs-height')); - } - var heightData = Utils.parseHeight(val); - - if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { - return ; - } - this.opts.cellHeightUnit = heightData.unit; - this.opts.cellHeight = heightData.height; - - if (!noUpdate) { - this._updateStyles(); - } - - }; - - GridStack.prototype.cellWidth = function() { - return Math.round(this.container.outerWidth() / this.opts.width); - }; - - GridStack.prototype.getCellFromPixel = function(position, useOffset) { - var containerPos = (typeof useOffset != 'undefined' && useOffset) ? - this.container.offset() : this.container.position(); - var relativeLeft = position.left - containerPos.left; - var relativeTop = position.top - containerPos.top; - - var columnWidth = Math.floor(this.container.width() / this.opts.width); - var rowHeight = Math.floor(this.container.height() / parseInt(this.container.attr('data-gs-current-height'))); - - return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; - }; - - GridStack.prototype.batchUpdate = function() { - this.grid.batchUpdate(); - }; - - GridStack.prototype.commit = function() { - this.grid.commit(); - this._updateContainerHeight(); - }; - - GridStack.prototype.isAreaEmpty = function(x, y, width, height) { - return this.grid.isAreaEmpty(x, y, width, height); - }; - - GridStack.prototype.setStatic = function(staticValue) { - this.opts.staticGrid = (staticValue === true); - this.enableMove(!staticValue); - this.enableResize(!staticValue); - this._setStaticClass(); - }; - - GridStack.prototype._setStaticClass = function() { - var staticClassName = 'grid-stack-static'; - - if (this.opts.staticGrid === true) { - this.container.addClass(staticClassName); - } else { - this.container.removeClass(staticClassName); - } - }; - - GridStack.prototype._updateNodeWidths = function(oldWidth, newWidth) { - this.grid._sortNodes(); - this.grid.batchUpdate(); - var node = {}; - for (var i = 0; i < this.grid.nodes.length; i++) { - node = this.grid.nodes[i]; - this.update(node.el, Math.round(node.x * newWidth / oldWidth), undefined, - Math.round(node.width * newWidth / oldWidth), undefined); - } - this.grid.commit(); - }; - - GridStack.prototype.setGridWidth = function(gridWidth,doNotPropagate) { - this.container.removeClass('grid-stack-' + this.opts.width); - if (doNotPropagate !== true) { - this._updateNodeWidths(this.opts.width, gridWidth); - } - this.opts.width = gridWidth; - this.grid.width = gridWidth; - this.container.addClass('grid-stack-' + gridWidth); - }; - - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - GridStackEngine.prototype.batch_update = obsolete(GridStackEngine.prototype.batchUpdate); - GridStackEngine.prototype._fix_collisions = obsolete(GridStackEngine.prototype._fixCollisions, - '_fix_collisions', '_fixCollisions'); - GridStackEngine.prototype.is_area_empty = obsolete(GridStackEngine.prototype.isAreaEmpty, - 'is_area_empty', 'isAreaEmpty'); - GridStackEngine.prototype._sort_nodes = obsolete(GridStackEngine.prototype._sortNodes, - '_sort_nodes', '_sortNodes'); - GridStackEngine.prototype._pack_nodes = obsolete(GridStackEngine.prototype._packNodes, - '_pack_nodes', '_packNodes'); - GridStackEngine.prototype._prepare_node = obsolete(GridStackEngine.prototype._prepareNode, - '_prepare_node', '_prepareNode'); - GridStackEngine.prototype.clean_nodes = obsolete(GridStackEngine.prototype.cleanNodes, - 'clean_nodes', 'cleanNodes'); - GridStackEngine.prototype.get_dirty_nodes = obsolete(GridStackEngine.prototype.getDirtyNodes, - 'get_dirty_nodes', 'getDirtyNodes'); - GridStackEngine.prototype.add_node = obsolete(GridStackEngine.prototype.addNode, - 'add_node', 'addNode, '); - GridStackEngine.prototype.remove_node = obsolete(GridStackEngine.prototype.removeNode, - 'remove_node', 'removeNode'); - GridStackEngine.prototype.can_move_node = obsolete(GridStackEngine.prototype.canMoveNode, - 'can_move_node', 'canMoveNode'); - GridStackEngine.prototype.move_node = obsolete(GridStackEngine.prototype.moveNode, - 'move_node', 'moveNode'); - GridStackEngine.prototype.get_grid_height = obsolete(GridStackEngine.prototype.getGridHeight, - 'get_grid_height', 'getGridHeight'); - GridStackEngine.prototype.begin_update = obsolete(GridStackEngine.prototype.beginUpdate, - 'begin_update', 'beginUpdate'); - GridStackEngine.prototype.end_update = obsolete(GridStackEngine.prototype.endUpdate, - 'end_update', 'endUpdate'); - GridStackEngine.prototype.can_be_placed_with_respect_to_height = - obsolete(GridStackEngine.prototype.canBePlacedWithRespectToHeight, - 'can_be_placed_with_respect_to_height', 'canBePlacedWithRespectToHeight'); - GridStack.prototype._trigger_change_event = obsolete(GridStack.prototype._triggerChangeEvent, - '_trigger_change_event', '_triggerChangeEvent'); - GridStack.prototype._init_styles = obsolete(GridStack.prototype._initStyles, - '_init_styles', '_initStyles'); - GridStack.prototype._update_styles = obsolete(GridStack.prototype._updateStyles, - '_update_styles', '_updateStyles'); - GridStack.prototype._update_container_height = obsolete(GridStack.prototype._updateContainerHeight, - '_update_container_height', '_updateContainerHeight'); - GridStack.prototype._is_one_column_mode = obsolete(GridStack.prototype._isOneColumnMode, - '_is_one_column_mode','_isOneColumnMode'); - GridStack.prototype._prepare_element = obsolete(GridStack.prototype._prepareElement, - '_prepare_element', '_prepareElement'); - GridStack.prototype.set_animation = obsolete(GridStack.prototype.setAnimation, - 'set_animation', 'setAnimation'); - GridStack.prototype.add_widget = obsolete(GridStack.prototype.addWidget, - 'add_widget', 'addWidget'); - GridStack.prototype.make_widget = obsolete(GridStack.prototype.makeWidget, - 'make_widget', 'makeWidget'); - GridStack.prototype.will_it_fit = obsolete(GridStack.prototype.willItFit, - 'will_it_fit', 'willItFit'); - GridStack.prototype.remove_widget = obsolete(GridStack.prototype.removeWidget, - 'remove_widget', 'removeWidget'); - GridStack.prototype.remove_all = obsolete(GridStack.prototype.removeAll, - 'remove_all', 'removeAll'); - GridStack.prototype.min_height = obsolete(GridStack.prototype.minHeight, - 'min_height', 'minHeight'); - GridStack.prototype.min_width = obsolete(GridStack.prototype.minWidth, - 'min_width', 'minWidth'); - GridStack.prototype._update_element = obsolete(GridStack.prototype._updateElement, - '_update_element', '_updateElement'); - GridStack.prototype.cell_height = obsolete(GridStack.prototype.cellHeight, - 'cell_height', 'cellHeight'); - GridStack.prototype.cell_width = obsolete(GridStack.prototype.cellWidth, - 'cell_width', 'cellWidth'); - GridStack.prototype.get_cell_from_pixel = obsolete(GridStack.prototype.getCellFromPixel, - 'get_cell_from_pixel', 'getCellFromPixel'); - GridStack.prototype.batch_update = obsolete(GridStack.prototype.batchUpdate, - 'batch_update', 'batchUpdate'); - GridStack.prototype.is_area_empty = obsolete(GridStack.prototype.isAreaEmpty, - 'is_area_empty', 'isAreaEmpty'); - GridStack.prototype.set_static = obsolete(GridStack.prototype.setStatic, - 'set_static', 'setStatic'); - GridStack.prototype._set_static_class = obsolete(GridStack.prototype._setStaticClass, - '_set_static_class', '_setStaticClass'); - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - - scope.GridStackUI = GridStack; - - scope.GridStackUI.Utils = Utils; - scope.GridStackUI.Engine = GridStackEngine; - scope.GridStackUI.GridStackDragDropPlugin = GridStackDragDropPlugin; - - $.fn.gridstack = function(opts) { - return this.each(function() { - var o = $(this); - if (!o.data('gridstack')) { - o - .data('gridstack', new GridStack(this, opts)); - } - }); - }; - - return scope.GridStackUI; -}); From e53ef030af4be1bff2695a77628e7f7909ad0507 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:44:21 -0700 Subject: [PATCH 0013/1298] Delete gridstack.min.js --- dist/gridstack.min.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 dist/gridstack.min.js diff --git a/dist/gridstack.min.js b/dist/gridstack.min.js deleted file mode 100644 index f4bbff4ad..000000000 --- a/dist/gridstack.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t){if("function"==typeof define&&define.amd)define(["jquery","exports"],t);else if("undefined"!=typeof exports){try{jQuery=require("jquery")}catch(t){}t(jQuery,exports)}else t(jQuery,window)}(function(u,t){var e=function(t,e,i){var o=function(){return console.warn("gridstack.js: Function `"+e+"` is deprecated as of v0.2.5 and has been replaced with `"+i+"`. It will be **completely** removed in v1.0."),t.apply(this,arguments)};return o.prototype=t.prototype,o},d=function(t,e){console.warn("gridstack.js: Option `"+t+"` is deprecated as of v0.2.5 and has been replaced with `"+e+"`. It will be **completely** removed in v1.0.")},_={isIntercepted:function(t,e){return!(t.x+t.width<=e.x||e.x+e.width<=t.x||t.y+t.height<=e.y||e.y+e.height<=t.y)},sort:function(t,e,i){if(!i){var o=t.map(function(t){return t.x+t.width});i=Math.max.apply(Math,o)}return e=-1!=e?1:-1,_.sortBy(t,function(t){return e*(t.x+t.y*i)})},createStylesheet:function(t){var e=document.createElement("style");return e.setAttribute("type","text/css"),e.setAttribute("data-gs-style-id",t),e.styleSheet?e.styleSheet.cssText="":e.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(e),e.sheet},removeStylesheet:function(t){u("STYLE[data-gs-style-id="+t+"]").remove()},insertCSSRule:function(t,e,i,o){"function"==typeof t.insertRule?t.insertRule(e+"{"+i+"}",o):"function"==typeof t.addRule&&t.addRule(e,i,o)},toBool:function(t){return"boolean"==typeof t?t:"string"==typeof t?!(""===(t=t.toLowerCase())||"no"==t||"false"==t||"0"==t):Boolean(t)},_collisionNodeCheck:function(t){return t!=this.node&&_.isIntercepted(t,this.nn)},_didCollide:function(t){return _.isIntercepted({x:this.n.x,y:this.newY,width:this.n.width,height:this.n.height},t)},_isAddNodeIntercepted:function(t){return _.isIntercepted({x:this.x,y:this.y,width:this.node.width,height:this.node.height},t)},parseHeight:function(t){var e=t,i="px";if(e&&"string"==typeof e){var o=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/);if(!o)throw new Error("Invalid height");i=o[2]||"px",e=parseFloat(o[1])}return{height:e,unit:i}},without:function(t,e){var i=t.indexOf(e);return-1!==i&&(t=t.slice(0)).splice(i,1),t},sortBy:function(t,a){return t.slice(0).sort(function(t,e){var i=a(t),o=a(e);return o===i?0:ot.clientHeight?t:_.getScrollParent(t.parentNode)},updateScrollPosition:function(t,e,i){var o=t.getBoundingClientRect(),a=window.innerHeight||document.documentElement.clientHeight;if(o.top<0||o.bottom>a){var r=o.bottom-a,s=o.top,n=_.getScrollParent(t);if(null!=n){var d=n.scrollTop;o.top<0&&i<0?t.offsetHeight>a?n.scrollTop+=i:n.scrollTop+=Math.abs(s)>Math.abs(i)?i:s:0a?n.scrollTop+=i:n.scrollTop+=i=t._origY;){this.nodes.slice(0,e).find(_._didCollide,{n:t,newY:i})||(t._dirty=!0,t.y=i),--i}},this):this.nodes.forEach(function(t,e){if(!t.locked)for(;0this.width?t.width=this.width:t.width<1&&(t.width=1),t.height<1&&(t.height=1),t.x<0&&(t.x=0),t.x+t.width>this.width&&(e?t.width=this.width-t.x:t.x=this.width-t.width),t.y<0&&(t.y=0),t},c.prototype._notify=function(){var t=Array.prototype.slice.call(arguments,0);if(t[0]=void 0===t[0]?[]:[t[0]],t[1]=void 0===t[1]||t[1],!this._updateCounter){var e=t[0].concat(this.getDirtyNodes());this.onchange(e,t[1])}},c.prototype.cleanNodes=function(){this._updateCounter||this.nodes.forEach(function(t){t._dirty=!1})},c.prototype.getDirtyNodes=function(){return this.nodes.filter(function(t){return t._dirty})},c.prototype.addNode=function(t,e){if(void 0!==(t=this._prepareNode(t)).maxWidth&&(t.width=Math.min(t.width,t.maxWidth)),void 0!==t.maxHeight&&(t.height=Math.min(t.height,t.maxHeight)),void 0!==t.minWidth&&(t.width=Math.max(t.width,t.minWidth)),void 0!==t.minHeight&&(t.height=Math.max(t.height,t.minHeight)),t._id=++r,t._dirty=!0,t.autoPosition){this._sortNodes();for(var i=0;;++i){var o=i%this.width,a=Math.floor(i/this.width);if(!(o+t.width>this.width)&&!this.nodes.find(_._isAddNodeIntercepted,{x:o,y:a,node:t})){t.x=o,t.y=a;break}}}return this.nodes.push(t),void 0!==e&&e&&this._addedNodes.push(_.clone(t)),this._fixCollisions(t),this._packNodes(),this._notify(),t},c.prototype.removeNode=function(t,e){e=void 0===e||e,this._removedNodes.push(_.clone(t)),t._id=null,this.nodes=_.without(this.nodes,t),this._packNodes(),this._notify(t,e)},c.prototype.canMoveNode=function(e,t,i,o,a){if(!this.isNodeChangedPosition(e,t,i,o,a))return!1;var r,s=Boolean(this.nodes.find(function(t){return t.locked}));if(!this.height&&!s)return!0;var n=new c(this.width,null,this.float,0,this.nodes.map(function(t){return t==e?r=u.extend({},t):u.extend({},t)}));if(void 0===r)return!0;n.moveNode(r,t,i,o,a);var d=!0;return s&&(d&=!Boolean(n.nodes.find(function(t){return t!=r&&Boolean(t.locked)&&Boolean(t._dirty)}))),this.height&&(d&=n.getGridHeight()<=this.height),d},c.prototype.canBePlacedWithRespectToHeight=function(t){if(!this.height)return!0;var e=new c(this.width,null,this.float,0,this.nodes.map(function(t){return u.extend({},t)}));return e.addNode(t),e.getGridHeight()<=this.height},c.prototype.isNodeChangedPosition=function(t,e,i,o,a){return"number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x!=e||t.y!=i||t.width!=o||t.height!=a},c.prototype.moveNode=function(t,e,i,o,a,r){if(!this.isNodeChangedPosition(t,e,i,o,a))return t;if("number"!=typeof e&&(e=t.x),"number"!=typeof i&&(i=t.y),"number"!=typeof o&&(o=t.width),"number"!=typeof a&&(a=t.height),void 0!==t.maxWidth&&(o=Math.min(o,t.maxWidth)),void 0!==t.maxHeight&&(a=Math.min(a,t.maxHeight)),void 0!==t.minWidth&&(o=Math.max(o,t.minWidth)),void 0!==t.minHeight&&(a=Math.max(a,t.minHeight)),t.x==e&&t.y==i&&t.width==o&&t.height==a)return t;var s=t.width!=o;return t._dirty=!0,t.x=e,t.y=i,t.width=o,t.height=a,t.lastTriedX=e,t.lastTriedY=i,t.lastTriedWidth=o,t.lastTriedHeight=a,t=this._prepareNode(t,s),this._fixCollisions(t),r||(this._packNodes(),this._notify()),t},c.prototype.getGridHeight=function(){return this.nodes.reduce(function(t,e){return Math.max(t,e.y+e.height)},0)},c.prototype.beginUpdate=function(t){this.nodes.forEach(function(t){t._origY=t.y}),t._updating=!0},c.prototype.endUpdate=function(){this.nodes.forEach(function(t){t._origY=t.y});var t=this.nodes.find(function(t){return t._updating});t&&(t._updating=!1)};var i=function(t,e){var i,o,h=this;e=e||{},this.container=u(t),void 0!==e.handle_class&&(e.handleClass=e.handle_class,d("handle_class","handleClass")),void 0!==e.item_class&&(e.itemClass=e.item_class,d("item_class","itemClass")),void 0!==e.placeholder_class&&(e.placeholderClass=e.placeholder_class,d("placeholder_class","placeholderClass")),void 0!==e.placeholder_text&&(e.placeholderText=e.placeholder_text,d("placeholder_text","placeholderText")),void 0!==e.cell_height&&(e.cellHeight=e.cell_height,d("cell_height","cellHeight")),void 0!==e.vertical_margin&&(e.verticalMargin=e.vertical_margin,d("vertical_margin","verticalMargin")),void 0!==e.min_width&&(e.minWidth=e.min_width,d("min_width","minWidth")),void 0!==e.static_grid&&(e.staticGrid=e.static_grid,d("static_grid","staticGrid")),void 0!==e.is_nested&&(e.isNested=e.is_nested,d("is_nested","isNested")),void 0!==e.always_show_resize_handle&&(e.alwaysShowResizeHandle=e.always_show_resize_handle,d("always_show_resize_handle","alwaysShowResizeHandle")),e.itemClass=e.itemClass||"grid-stack-item";var a=0
'+this.opts.placeholderText+"
").hide(),this._updateContainerHeight(),this._updateHeightsOnResize=_.throttle(function(){h.cellHeight(h.cellWidth(),!1)},100),this.onResizeHandler=function(){if(o&&h._updateHeightsOnResize(),h._isOneColumnMode()&&!h.opts.disableOneColumnMode){if(i)return;h.container.addClass(h.opts.oneColumnModeClass),i=!0,h.grid._sortNodes(),h.grid.nodes.forEach(function(t){h.container.append(t.el),h.opts.staticGrid||(h.dd.draggable(t.el,"disable"),h.dd.resizable(t.el,"disable"),t.el.trigger("resize"))})}else{if(!i)return;if(h.container.removeClass(h.opts.oneColumnModeClass),i=!1,h.opts.staticGrid)return;h.grid.nodes.forEach(function(t){t.noMove||h.opts.disableDrag||h.dd.draggable(t.el,"enable"),t.noResize||h.opts.disableResize||h.dd.resizable(t.el,"enable"),t.el.trigger("resize")})}},u(window).resize(this.onResizeHandler),this.onResizeHandler(),!h.opts.staticGrid&&"string"==typeof h.opts.removable){var n=u(h.opts.removable);this.dd.isDroppable(n)||this.dd.droppable(n,h.opts.removableOptions),this.dd.on(n,"dropover",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!0),h._setupRemovingTimeout(i))}).on(n,"dropout",function(t,e){var i=u(e.draggable);i.data("_gridstack_node")._grid===h&&(i.data("inTrashZone",!1),h._clearRemovingTimeout(i))})}if(!h.opts.staticGrid&&h.opts.acceptWidgets){var l=null,p=function(t,e){var i=l,o=i.data("_gridstack_node"),a=h.getCellFromPixel({left:t.pageX,top:t.pageY},!0),r=Math.max(0,a.x),s=Math.max(0,a.y);o._added||(o._added=!0,o.el=i,o.autoPosition=!0,o.x=r,o.y=s,h.grid.cleanNodes(),h.grid.beginUpdate(o),h.grid.addNode(o),h.container.append(h.placeholder),h.placeholder.attr("data-gs-x",o.x).attr("data-gs-y",o.y).attr("data-gs-width",o.width).attr("data-gs-height",o.height).show(),o.el=h.placeholder,o._beforeDragX=o.x,o._beforeDragY=o.y,h._updateContainerHeight()),h.grid.canMoveNode(o,r,s)&&(h.grid.moveNode(o,r,s),h._updateContainerHeight())};this.dd.droppable(h.container,{accept:function(t){var e=(t=u(t)).data("_gridstack_node");return(!e||e._grid!==h)&&t.is(!0===h.opts.acceptWidgets?".grid-stack-item":h.opts.acceptWidgets)}}).on(h.container,"dropover",function(t,e){h.container.offset();var i=u(e.draggable),o=h.cellWidth(),a=h.cellHeight(),r=i.data("_gridstack_node"),s=r?r.width:Math.ceil(i.outerWidth()/o),n=r?r.height:Math.ceil(i.outerHeight()/a);l=i;var d=h.grid._prepareNode({width:s,height:n,_added:!1,_temporary:!0});i.data("_gridstack_node",d),i.data("_gridstack_node_orig",r),i.on("drag",p)}).on(h.container,"dropout",function(t,e){var i=u(e.draggable);if(i.data("_gridstack_node")){i.unbind("drag",p);var o=i.data("_gridstack_node");o.el=null,h.grid.removeNode(o),h.placeholder.detach(),h._updateContainerHeight(),i.data("_gridstack_node",i.data("_gridstack_node_orig"))}}).on(h.container,"drop",function(t,e){h.placeholder.detach();var i=u(e.draggable).data("_gridstack_node");i._grid=h;var o=u(e.draggable).clone(!1);o.data("_gridstack_node",i);var a=u(e.draggable).data("_gridstack_node_orig");void 0!==a&&void 0!==a._grid&&a._grid._triggerRemoveEvent(),u(e.helper).remove(),i.el=o,h.placeholder.hide(),_.removePositioningStyles(o),o.find("div.ui-resizable-handle").remove(),o.attr("data-gs-x",i.x).attr("data-gs-y",i.y).attr("data-gs-width",i.width).attr("data-gs-height",i.height).addClass(h.opts.itemClass).enableSelection().removeData("draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled").unbind("drag",p),h.container.append(o),h._prepareElementsByNode(o,i),h._updateContainerHeight(),h.grid._addedNodes.push(i),h._triggerAddEvent(),h._triggerChangeEvent(),h.grid.endUpdate(),u(e.draggable).unbind("drag",p),u(e.draggable).removeData("_gridstack_node"),u(e.draggable).removeData("_gridstack_node_orig"),h.container.trigger("dropped",[a,i])})}};return i.prototype._triggerChangeEvent=function(t){var e=this.grid.getDirtyNodes(),i=!1,o=[];e&&e.length&&(o.push(e),i=!0),(i||!0===t)&&this.container.trigger("change",o)},i.prototype._triggerAddEvent=function(){this.grid._addedNodes&&0this._styles._max)){for(var a=this._styles._max;a=c.grid.width||r<0||!c.grid.float&&r>c.grid.getGridHeight()){if(l._temporaryRemoved)return;!0===c.opts.removable&&c._setupRemovingTimeout(h),a=l._beforeDragX,r=l._beforeDragY,c.placeholder.detach(),c.placeholder.hide(),c.grid.removeNode(l),c._updateContainerHeight(),l._temporaryRemoved=!0}else c._clearRemovingTimeout(h),l._temporaryRemoved&&(c.grid.addNode(l),c.placeholder.attr("data-gs-x",a).attr("data-gs-y",r).attr("data-gs-width",i).attr("data-gs-height",o).show(),c.container.append(c.placeholder),l.el=c.placeholder,l._temporaryRemoved=!1)}else if("resize"==t.type&&a<0)return;var n=void 0!==i?i:l.lastTriedWidth,d=void 0!==o?o:l.lastTriedHeight;!c.grid.canMoveNode(l,a,r,i,o)||l.lastTriedX===a&&l.lastTriedY===r&&l.lastTriedWidth===n&&l.lastTriedHeight===d||(l.lastTriedX=a,l.lastTriedY=r,l.lastTriedWidth=i,l.lastTriedHeight=o,c.grid.moveNode(l,a,r,i,o),c._updateContainerHeight(),"resize"==t.type&&u(t.target).trigger("gsresize",l))},e=function(t,e){c.container.append(c.placeholder);var i=u(this);c.grid.cleanNodes(),c.grid.beginUpdate(l),p=c.cellWidth();var o=Math.ceil(i.outerHeight()/i.attr("data-gs-height"));g=c.container.height()/parseInt(c.container.attr("data-gs-current-height")),c.placeholder.attr("data-gs-x",i.attr("data-gs-x")).attr("data-gs-y",i.attr("data-gs-y")).attr("data-gs-width",i.attr("data-gs-width")).attr("data-gs-height",i.attr("data-gs-height")).show(),l.el=c.placeholder,l._beforeDragX=l.x,l._beforeDragY=l.y,l._prevYPix=e.position.top,c.dd.resizable(h,"option","minWidth",p*(l.minWidth||1)),c.dd.resizable(h,"option","minHeight",o*(l.minHeight||1)),"resizestart"==t.type&&i.find(".grid-stack-item").trigger("resizestart")},i=function(t,e){var i=u(this);if(i.data("_gridstack_node")){var o=!1;if(c.placeholder.detach(),l.el=i,c.placeholder.hide(),l._isAboutToRemove)o=!0,h.data("_gridstack_node")._grid._triggerRemoveEvent(),h.removeData("_gridstack_node"),h.remove();else c._clearRemovingTimeout(h),l._temporaryRemoved?(_.removePositioningStyles(i),i.attr("data-gs-x",l._beforeDragX).attr("data-gs-y",l._beforeDragY).attr("data-gs-width",l.width).attr("data-gs-height",l.height),l.x=l._beforeDragX,l.y=l._beforeDragY,l._temporaryRemoved=!1,c.grid.addNode(l)):(_.removePositioningStyles(i),i.attr("data-gs-x",l.x).attr("data-gs-y",l.y).attr("data-gs-width",l.width).attr("data-gs-height",l.height));c._updateContainerHeight(),c._triggerChangeEvent(o),c.grid.endUpdate();var a=i.find(".grid-stack");a.length&&"resizestop"==t.type&&(a.each(function(t,e){u(e).data("gridstack").onResizeHandler()}),i.find(".grid-stack-item").trigger("resizestop"),i.find(".grid-stack-item").trigger("gsresizestop")),"resizestop"==t.type&&c.container.trigger("gsresizestop",i)}};this.dd.draggable(h,{start:e,stop:i,drag:t}).resizable(h,{start:e,stop:i,resize:t}),(l.noMove||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableDrag||this.opts.staticGrid)&&this.dd.draggable(h,"disable"),(l.noResize||this._isOneColumnMode()&&!c.opts.disableOneColumnMode||this.opts.disableResize||this.opts.staticGrid)&&this.dd.resizable(h,"disable"),h.attr("data-gs-locked",l.locked?"yes":null)},i.prototype._prepareElement=function(t,e){e=void 0!==e&&e;(t=u(t)).addClass(this.opts.itemClass);var i=this.grid.addNode({x:parseInt(t.attr("data-gs-x"),10),y:parseInt(t.attr("data-gs-y"),10),width:t.attr("data-gs-width"),height:t.attr("data-gs-height"),maxWidth:t.attr("data-gs-max-width"),minWidth:t.attr("data-gs-min-width"),maxHeight:t.attr("data-gs-max-height"),minHeight:t.attr("data-gs-min-height"),autoPosition:_.toBool(t.attr("data-gs-auto-position")),noResize:_.toBool(t.attr("data-gs-no-resize")),noMove:_.toBool(t.attr("data-gs-no-move")),locked:_.toBool(t.attr("data-gs-locked")),resizeHandles:t.attr("data-gs-resize-handles"),el:t,id:t.attr("data-gs-id"),_grid:this},e);t.data("_gridstack_node",i),this._prepareElementsByNode(t,i)},i.prototype.setAnimation=function(t){t?this.container.addClass("grid-stack-animate"):this.container.removeClass("grid-stack-animate")},i.prototype.addWidget=function(t,e,i,o,a,r,s,n,d,h,l){return t=u(t),void 0!==e&&t.attr("data-gs-x",e),void 0!==i&&t.attr("data-gs-y",i),void 0!==o&&t.attr("data-gs-width",o),void 0!==a&&t.attr("data-gs-height",a),void 0!==r&&t.attr("data-gs-auto-position",r?"yes":null),void 0!==s&&t.attr("data-gs-min-width",s),void 0!==n&&t.attr("data-gs-max-width",n),void 0!==d&&t.attr("data-gs-min-height",d),void 0!==h&&t.attr("data-gs-max-height",h),void 0!==l&&t.attr("data-gs-id",l),this.container.append(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.makeWidget=function(t){return t=u(t),this._prepareElement(t,!0),this._triggerAddEvent(),this._updateContainerHeight(),this._triggerChangeEvent(!0),t},i.prototype.willItFit=function(t,e,i,o,a){var r={x:t,y:e,width:i,height:o,autoPosition:a};return this.grid.canBePlacedWithRespectToHeight(r)},i.prototype.removeWidget=function(t,e){e=void 0===e||e;var i=(t=u(t)).data("_gridstack_node");i||(i=this.grid.getNodeDataByDOMEl(t)),this.grid.removeNode(i,e),t.removeData("_gridstack_node"),this._updateContainerHeight(),e&&t.remove(),this._triggerChangeEvent(!0),this._triggerRemoveEvent()},i.prototype.removeAll=function(e){this.grid.nodes.forEach(function(t){this.removeWidget(t.el,e)},this),this.grid.nodes=[],this._updateContainerHeight()},i.prototype.destroy=function(t){u(window).off("resize",this.onResizeHandler),this.disable(),void 0===t||t?this.container.remove():(this.removeAll(!1),this.container.removeData("gridstack")),_.removeStylesheet(this._stylesId),this.grid&&(this.grid=null)},i.prototype.resizable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noResize=!o,i.noResize||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?a.dd.resizable(e,"disable"):a.dd.resizable(e,"enable"))}),this},i.prototype.movable=function(t,o){var a=this;return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.noMove=!o,i.noMove||a._isOneColumnMode()&&!a.opts.disableOneColumnMode?(a.dd.draggable(e,"disable"),e.removeClass("ui-draggable-handle")):(a.dd.draggable(e,"enable"),e.addClass("ui-draggable-handle")))}),this},i.prototype.enableMove=function(t,e){this.movable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableDrag=!t)},i.prototype.enableResize=function(t,e){this.resizable(this.container.children("."+this.opts.itemClass),t),e&&(this.opts.disableResize=!t)},i.prototype.disable=function(){this.movable(this.container.children("."+this.opts.itemClass),!1),this.resizable(this.container.children("."+this.opts.itemClass),!1),this.container.trigger("disable")},i.prototype.enable=function(){this.movable(this.container.children("."+this.opts.itemClass),!0),this.resizable(this.container.children("."+this.opts.itemClass),!0),this.container.trigger("enable")},i.prototype.locked=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(i.locked=o||!1,e.attr("data-gs-locked",i.locked?"yes":null))}),this},i.prototype.maxHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxHeight=o||!1,e.attr("data-gs-max-height",o)))}),this},i.prototype.minHeight=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minHeight=o||!1,e.attr("data-gs-min-height",o)))}),this},i.prototype.maxWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.maxWidth=o||!1,e.attr("data-gs-max-width",o)))}),this},i.prototype.minWidth=function(t,o){return(t=u(t)).each(function(t,e){var i=(e=u(e)).data("_gridstack_node");null!=i&&(isNaN(o)||(i.minWidth=o||!1,e.attr("data-gs-min-width",o)))}),this},i.prototype._updateElement=function(t,e){var i=(t=u(t).first()).data("_gridstack_node");if(null!=i){var o=this;o.grid.cleanNodes(),o.grid.beginUpdate(i),e.call(this,t,i),o._updateContainerHeight(),o._triggerChangeEvent(),o.grid.endUpdate()}},i.prototype.resize=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.width,o=null!=o?o:e.height,this.grid.moveNode(e,e.x,e.y,i,o)})},i.prototype.move=function(t,i,o){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,this.grid.moveNode(e,i,o,e.width,e.height)})},i.prototype.update=function(t,i,o,a,r){this._updateElement(t,function(t,e){i=null!=i?i:e.x,o=null!=o?o:e.y,a=null!=a?a:e.width,r=null!=r?r:e.height,this.grid.moveNode(e,i,o,a,r)})},i.prototype.verticalMargin=function(t,e){if(void 0===t)return this.opts.verticalMargin;var i=_.parseHeight(t);this.opts.verticalMarginUnit===i.unit&&this.opts.height===i.height||(this.opts.verticalMarginUnit=i.unit,this.opts.verticalMargin=i.height,e||this._updateStyles())},i.prototype.cellHeight=function(t,e){if(void 0===t){if(this.opts.cellHeight)return this.opts.cellHeight;var i=this.container.children("."+this.opts.itemClass).first();return Math.ceil(i.outerHeight()/i.attr("data-gs-height"))}var o=_.parseHeight(t);this.opts.cellHeightUnit===o.unit&&this.opts.cellHeight===o.height||(this.opts.cellHeightUnit=o.unit,this.opts.cellHeight=o.height,e||this._updateStyles())},i.prototype.cellWidth=function(){return Math.round(this.container.outerWidth()/this.opts.width)},i.prototype.getCellFromPixel=function(t,e){var i=void 0!==e&&e?this.container.offset():this.container.position(),o=t.left-i.left,a=t.top-i.top,r=Math.floor(this.container.width()/this.opts.width),s=Math.floor(this.container.height()/parseInt(this.container.attr("data-gs-current-height")));return{x:Math.floor(o/r),y:Math.floor(a/s)}},i.prototype.batchUpdate=function(){this.grid.batchUpdate()},i.prototype.commit=function(){this.grid.commit(),this._updateContainerHeight()},i.prototype.isAreaEmpty=function(t,e,i,o){return this.grid.isAreaEmpty(t,e,i,o)},i.prototype.setStatic=function(t){this.opts.staticGrid=!0===t,this.enableMove(!t),this.enableResize(!t),this._setStaticClass()},i.prototype._setStaticClass=function(){var t="grid-stack-static";!0===this.opts.staticGrid?this.container.addClass(t):this.container.removeClass(t)},i.prototype._updateNodeWidths=function(t,e){this.grid._sortNodes(),this.grid.batchUpdate();for(var i={},o=0;o Date: Tue, 26 Mar 2019 08:44:45 -0700 Subject: [PATCH 0014/1298] Delete gridstack.min.map --- dist/gridstack.min.map | 1 - 1 file changed, 1 deletion(-) delete mode 100644 dist/gridstack.min.map diff --git a/dist/gridstack.min.map b/dist/gridstack.min.map deleted file mode 100644 index dec7dd1e3..000000000 --- a/dist/gridstack.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/gridstack.js","../src/gridstack.jQueryUI.js"],"names":["factory","define","amd","exports","jQuery","require","e","window","$","scope","obsolete","f","oldName","newName","wrapper","console","warn","apply","this","arguments","prototype","obsoleteOpts","Utils","isIntercepted","a","b","x","width","y","height","sort","nodes","dir","widths","map","node","Math","max","sortBy","n","createStylesheet","id","style","document","createElement","setAttribute","styleSheet","cssText","appendChild","createTextNode","getElementsByTagName","sheet","removeStylesheet","remove","insertCSSRule","selector","rules","index","insertRule","addRule","toBool","v","toLowerCase","Boolean","_collisionNodeCheck","nn","_didCollide","bn","newY","_isAddNodeIntercepted","parseHeight","val","heightUnit","match","Error","parseFloat","unit","without","array","item","indexOf","slice","splice","getter","left","right","valueLeft","valueRight","defaults","target","Array","call","forEach","source","prop","hasOwnProperty","clone","extend","throttle","callback","delay","isWaiting","setTimeout","removePositioningStyles","el","position","removeProperty","top","getScrollParent","scrollHeight","clientHeight","parentNode","updateScrollPosition","ui","distance","rect","getBoundingClientRect","innerHeightOrClientHeight","innerHeight","documentElement","bottom","offsetDiffDown","offsetDiffUp","scrollEl","prevScroll","scrollTop","offsetHeight","abs","GridStackDragDropPlugin","grid","is_intercepted","create_stylesheet","remove_stylesheet","insert_css_rule","registeredPlugins","registerPlugin","pluginClass","push","resizable","opts","draggable","droppable","isDroppable","on","eventName","idSeq","GridStackEngine","onchange","floatMode","items","float","_updateCounter","_float","_addedNodes","_removedNodes","batchUpdate","commit","_packNodes","_notify","getNodeDataByDOMEl","find","get","_fixCollisions","_sortNodes","hasLocked","locked","collisionNode","moveNode","isAreaEmpty","i","_updating","_origY","_dirty","canBeMoved","_prepareNode","resizing","parseInt","autoPosition","noResize","noMove","args","deletedNodes","concat","getDirtyNodes","cleanNodes","filter","addNode","triggerAddEvent","maxWidth","min","maxHeight","minWidth","minHeight","_id","floor","removeNode","detachNode","canMoveNode","isNodeChangedPosition","clonedNode","res","getGridHeight","canBePlacedWithRespectToHeight","noPack","lastTriedX","lastTriedY","lastTriedWidth","lastTriedHeight","reduce","memo","beginUpdate","endUpdate","GridStack","oneColumnMode","isAutoCellHeight","self","container","handle_class","handleClass","item_class","itemClass","placeholder_class","placeholderClass","placeholder_text","placeholderText","cell_height","cellHeight","vertical_margin","verticalMargin","min_width","static_grid","staticGrid","is_nested","isNested","always_show_resize_handle","alwaysShowResizeHandle","closest","length","attr","handle","auto","_class","random","toFixed","animate","autoHide","handles","scroll","appendTo","disableDrag","disableResize","rtl","removable","removableOptions","accept","removeTimeout","verticalMarginUnit","cellHeightUnit","disableOneColumnMode","oneColumnModeClass","ddPlugin","dd","css","addClass","cellWidth","_setStaticClass","_initStyles","_updateStyles","elements","_this","children","each","_prepareElement","setAnimation","placeholder","hide","_updateContainerHeight","_updateHeightsOnResize","onResizeHandler","_isOneColumnMode","append","trigger","removeClass","resize","trashZone","event","data","_grid","_setupRemovingTimeout","_clearRemovingTimeout","acceptWidgets","draggingElement","onDrag","pos","getCellFromPixel","pageX","pageY","_added","show","_beforeDragX","_beforeDragY","is","offset","origNode","ceil","outerWidth","outerHeight","_temporary","unbind","detach","originalNode","_triggerRemoveEvent","helper","enableSelection","removeData","_prepareElementsByNode","_triggerAddEvent","_triggerChangeEvent","forceTrigger","hasChanges","eventParams","_stylesId","_styles","_max","getHeight","prefix","nbRows","nbMargins","cssMinHeight","innerWidth","clientWidth","body","_removeTimeout","_isAboutToRemove","clearTimeout","dragOrResize","round","type","size","_prevYPix","_temporaryRemoved","onStartMoving","o","strictCellHeight","onEndMoving","forceNotify","nestedGrids","start","stop","drag","resizeHandles","enable","addWidget","makeWidget","willItFit","removeWidget","removeAll","destroy","detachGrid","off","disable","movable","enableMove","doEnable","includeNewWidgets","enableResize","isNaN","_updateElement","first","move","update","noUpdate","heightData","useOffset","containerPos","relativeLeft","relativeTop","columnWidth","rowHeight","setStatic","staticValue","staticClassName","_updateNodeWidths","oldWidth","newWidth","undefined","setGridWidth","gridWidth","doNotPropagate","batch_update","_fix_collisions","is_area_empty","_sort_nodes","_pack_nodes","_prepare_node","clean_nodes","get_dirty_nodes","add_node","remove_node","can_move_node","move_node","get_grid_height","begin_update","end_update","can_be_placed_with_respect_to_height","_trigger_change_event","_init_styles","_update_styles","_update_container_height","_is_one_column_mode","_prepare_element","set_animation","add_widget","make_widget","will_it_fit","remove_widget","remove_all","min_height","_update_element","cell_width","get_cell_from_pixel","set_static","_set_static_class","GridStackUI","Engine","fn","gridstack","JQueryUIGridStackDragDropPlugin","Object","create","constructor","key","value","containment","parent"],"mappings":"CAOA,SAAUA,GACN,GAAsB,mBAAXC,QAAyBA,OAAOC,IACvCD,OAAO,CAAC,SAAU,WAAYD,QAC3B,GAAuB,oBAAZG,QAAyB,CACvC,IAAMC,OAASC,QAAQ,UAAa,MAAOC,IAC3CN,EAAQI,OAAQD,cAEhBH,EAAQI,OAAQG,QAPxB,CASG,SAASC,EAAGC,GACX,IAAIC,EAAW,SAASC,EAAGC,EAASC,GAChC,IAAIC,EAAU,WAGV,OAFAC,QAAQC,KAAK,2BAA6BJ,EAAU,4DACzCC,EAAU,iDACdF,EAAEM,MAAMC,KAAMC,YAIzB,OAFAL,EAAQM,UAAYT,EAAES,UAEfN,GAGPO,EAAe,SAAST,EAASC,GACjCE,QAAQC,KAAK,yBAA2BJ,EAAU,4DAC9CC,EAAU,kDAGdS,EAAQ,CAERC,cAAe,SAASC,EAAGC,GACvB,QAASD,EAAEE,EAAIF,EAAEG,OAASF,EAAEC,GAAKD,EAAEC,EAAID,EAAEE,OAASH,EAAEE,GAAKF,EAAEI,EAAIJ,EAAEK,QAAUJ,EAAEG,GAAKH,EAAEG,EAAIH,EAAEI,QAAUL,EAAEI,IAG1GE,KAAM,SAASC,EAAOC,EAAKL,GACvB,IAAKA,EAAO,CACR,IAAIM,EAASF,EAAMG,IAAI,SAASC,GAAQ,OAAOA,EAAKT,EAAIS,EAAKR,QAC7DA,EAAQS,KAAKC,IAAIpB,MAAMmB,KAAMH,GAIjC,OADAD,GAAc,GAARA,EAAY,GAAK,EAChBV,EAAMgB,OAAOP,EAAO,SAASQ,GAAK,OAAOP,GAAOO,EAAEb,EAAIa,EAAEX,EAAID,MAGvEa,iBAAkB,SAASC,GACvB,IAAIC,EAAQC,SAASC,cAAc,SASnC,OARAF,EAAMG,aAAa,OAAQ,YAC3BH,EAAMG,aAAa,mBAAoBJ,GACnCC,EAAMI,WACNJ,EAAMI,WAAWC,QAAU,GAE3BL,EAAMM,YAAYL,SAASM,eAAe,KAE9CN,SAASO,qBAAqB,QAAQ,GAAGF,YAAYN,GAC9CA,EAAMS,OAGjBC,iBAAkB,SAASX,GACvBjC,EAAE,0BAA4BiC,EAAK,KAAKY,UAG5CC,cAAe,SAASH,EAAOI,EAAUC,EAAOC,GACZ,mBAArBN,EAAMO,WACbP,EAAMO,WAAWH,EAAW,IAAMC,EAAQ,IAAKC,GACf,mBAAlBN,EAAMQ,SACpBR,EAAMQ,QAAQJ,EAAUC,EAAOC,IAIvCG,OAAQ,SAASC,GACb,MAAgB,kBAALA,EACAA,EAEK,iBAALA,IAEQ,MADfA,EAAIA,EAAEC,gBACoB,MAALD,GAAkB,SAALA,GAAqB,KAALA,GAE/CE,QAAQF,IAGnBG,oBAAqB,SAASzB,GAC1B,OAAOA,GAAKrB,KAAKiB,MAAQb,EAAMC,cAAcgB,EAAGrB,KAAK+C,KAGzDC,YAAa,SAASC,GAClB,OAAO7C,EAAMC,cAAc,CAACG,EAAGR,KAAKqB,EAAEb,EAAGE,EAAGV,KAAKkD,KAAMzC,MAAOT,KAAKqB,EAAEZ,MAAOE,OAAQX,KAAKqB,EAAEV,QAASsC,IAGxGE,sBAAuB,SAAS9B,GAC5B,OAAOjB,EAAMC,cAAc,CAACG,EAAGR,KAAKQ,EAAGE,EAAGV,KAAKU,EAAGD,MAAOT,KAAKiB,KAAKR,MAAOE,OAAQX,KAAKiB,KAAKN,QAASU,IAGzG+B,YAAa,SAASC,GAClB,IAAI1C,EAAS0C,EACTC,EAAa,KACjB,GAAI3C,GAA4B,iBAAXA,EAAqB,CACtC,IAAI4C,EAAQ5C,EAAO4C,MAAM,uEACzB,IAAKA,EACD,MAAM,IAAIC,MAAM,kBAEpBF,EAAaC,EAAM,IAAM,KACzB5C,EAAS8C,WAAWF,EAAM,IAE9B,MAAO,CAAC5C,OAAQA,EAAQ+C,KAAMJ,IAGlCK,QAAU,SAASC,EAAOC,GACtB,IAAItB,EAAQqB,EAAME,QAAQD,GAO1B,OALe,IAAXtB,IACAqB,EAAQA,EAAMG,MAAM,IACdC,OAAOzB,EAAO,GAGjBqB,GAGXxC,OAAQ,SAASwC,EAAOK,GACpB,OAAOL,EAAMG,MAAM,GAAGnD,KAAK,SAASsD,EAAMC,GACtC,IAAIC,EAAYH,EAAOC,GACnBG,EAAaJ,EAAOE,GAExB,OAAIE,IAAeD,EACR,EAGQC,EAAZD,EAAyB,GAAK,KAI7CE,SAAU,SAASC,GAWf,OAVcC,MAAMtE,UAAU6D,MAAMU,KAAKxE,UAAW,GAE5CyE,QAAQ,SAASC,GACrB,IAAK,IAAIC,KAAQD,EACTA,EAAOE,eAAeD,KAAUL,EAAOM,eAAeD,KACtDL,EAAOK,GAAQD,EAAOC,MAK3BL,GAGXO,MAAO,SAASP,GACZ,OAAOjF,EAAEyF,OAAO,GAAIR,IAGxBS,SAAU,SAASC,EAAUC,GACzB,IAAIC,GAAY,EAEhB,OAAO,WACEA,IACDF,EAASlF,MAAMC,KAAMC,WACrBkF,GAAY,EACZC,WAAW,WAAaD,GAAY,GAAUD,MAK1DG,wBAAyB,SAASC,GAC9B,IAAI9D,EAAQ8D,EAAG,GAAG9D,MACdA,EAAM+D,UACN/D,EAAMgE,eAAe,YAErBhE,EAAM0C,MACN1C,EAAMgE,eAAe,QAErBhE,EAAMiE,KACNjE,EAAMgE,eAAe,OAErBhE,EAAMf,OACNe,EAAMgE,eAAe,SAErBhE,EAAMb,QACNa,EAAMgE,eAAe,WAG7BE,gBAAiB,SAASJ,GAStB,OAPU,MAANA,EACW,KACJA,EAAGK,aAAeL,EAAGM,aACjBN,EAEAlF,EAAMsF,gBAAgBJ,EAAGO,aAI5CC,qBAAsB,SAASR,EAAIS,EAAIC,GAEnC,IAAIC,EAAOX,EAAGY,wBACVC,EAA6B9G,OAAO+G,aAAe3E,SAAS4E,gBAAgBT,aAChF,GAAIK,EAAKR,IAAM,GACXQ,EAAKK,OAASH,EAChB,CAIE,IAAII,EAAiBN,EAAKK,OAASH,EAC/BK,EAAeP,EAAKR,IACpBgB,EAAWrG,EAAMsF,gBAAgBJ,GACrC,GAAgB,MAAZmB,EAAkB,CAClB,IAAIC,EAAaD,EAASE,UACtBV,EAAKR,IAAM,GAAKO,EAAW,EAEvBV,EAAGsB,aAAeT,EAClBM,EAASE,WAAaX,EAEtBS,EAASE,WAAazF,KAAK2F,IAAIL,GAAgBtF,KAAK2F,IAAIb,GAAYA,EAAWQ,EAEjE,EAAXR,IAEHV,EAAGsB,aAAeT,EAClBM,EAASE,WAAaX,EAEtBS,EAASE,WAA8BX,EAAjBO,EAA4BP,EAAWO,GAIrER,EAAGR,SAASE,KAAOgB,EAASE,UAAYD,MAoBxD,SAASI,EAAwBC,GAC7B/G,KAAK+G,KAAOA,EAdhB3G,EAAM4G,eAAiBxH,EAASY,EAAMC,cAAe,iBAAkB,iBAEvED,EAAM6G,kBAAoBzH,EAASY,EAAMkB,iBAAkB,oBAAqB,oBAEhFlB,EAAM8G,kBAAoB1H,EAASY,EAAM8B,iBAAkB,oBAAqB,oBAEhF9B,EAAM+G,gBAAkB3H,EAASY,EAAMgC,cAAe,kBAAmB,iBAWzE0E,EAAwBM,kBAAoB,GAE5CN,EAAwBO,eAAiB,SAASC,GAC9CR,EAAwBM,kBAAkBG,KAAKD,IAGnDR,EAAwB5G,UAAUsH,UAAY,SAASlC,EAAImC,GACvD,OAAOzH,MAGX8G,EAAwB5G,UAAUwH,UAAY,SAASpC,EAAImC,GACvD,OAAOzH,MAGX8G,EAAwB5G,UAAUyH,UAAY,SAASrC,EAAImC,GACvD,OAAOzH,MAGX8G,EAAwB5G,UAAU0H,YAAc,SAAStC,GACrD,OAAO,GAGXwB,EAAwB5G,UAAU2H,GAAK,SAASvC,EAAIwC,EAAW7C,GAC3D,OAAOjF,MAIX,IAAI+H,EAAQ,EAERC,EAAkB,SAASvH,EAAOwH,EAAUC,EAAWvH,EAAQwH,GAC/DnI,KAAKS,MAAQA,EACbT,KAAKoI,MAAQF,IAAa,EAC1BlI,KAAKW,OAASA,GAAU,EAExBX,KAAKa,MAAQsH,GAAS,GACtBnI,KAAKiI,SAAWA,GAAY,aAE5BjI,KAAKqI,eAAiB,EACtBrI,KAAKsI,OAAStI,KAAKoI,MAEnBpI,KAAKuI,YAAc,GACnBvI,KAAKwI,cAAgB,IAGzBR,EAAgB9H,UAAUuI,YAAc,WACpCzI,KAAKqI,eAAiB,EACtBrI,KAAKoI,OAAQ,GAGjBJ,EAAgB9H,UAAUwI,OAAS,WACH,IAAxB1I,KAAKqI,iBACLrI,KAAKqI,eAAiB,EACtBrI,KAAKoI,MAAQpI,KAAKsI,OAClBtI,KAAK2I,aACL3I,KAAK4I,YAKbZ,EAAgB9H,UAAU2I,mBAAqB,SAASvD,GACpD,OAAOtF,KAAKa,MAAMiI,KAAK,SAASzH,GAAK,OAAOiE,EAAGyD,IAAI,KAAO1H,EAAEiE,GAAGyD,IAAI,MAGvEf,EAAgB9H,UAAU8I,eAAiB,SAAS/H,GAEhDjB,KAAKiJ,YAAY,GAEjB,IAAIlG,EAAK9B,EACLiI,EAAYrG,QAAQ7C,KAAKa,MAAMiI,KAAK,SAASzH,GAAK,OAAOA,EAAE8H,UAI/D,IAHKnJ,KAAKoI,OAAUc,IAChBnG,EAAK,CAACvC,EAAG,EAAGE,EAAGO,EAAKP,EAAGD,MAAOT,KAAKS,MAAOE,OAAQM,EAAKN,WAE9C,CACT,IAAIyI,EAAgBpJ,KAAKa,MAAMiI,KAAK1I,EAAM0C,oBAAqB,CAAC7B,KAAMA,EAAM8B,GAAIA,IAChF,QAA4B,IAAjBqG,EACP,OAEJpJ,KAAKqJ,SAASD,EAAeA,EAAc5I,EAAGS,EAAKP,EAAIO,EAAKN,OACxDyI,EAAc3I,MAAO2I,EAAczI,QAAQ,KAIvDqH,EAAgB9H,UAAUoJ,YAAc,SAAS9I,EAAGE,EAAGD,EAAOE,GAC1D,IAAIoC,EAAK,CAACvC,EAAGA,GAAK,EAAGE,EAAGA,GAAK,EAAGD,MAAOA,GAAS,EAAGE,OAAQA,GAAU,GACjEyI,EAAgBpJ,KAAKa,MAAMiI,KAAK,SAASzH,GACzC,OAAOjB,EAAMC,cAAcgB,EAAG0B,KAElC,OAAOqG,MAAAA,GAGXpB,EAAgB9H,UAAU+I,WAAa,SAASnI,GAC5Cd,KAAKa,MAAQT,EAAMQ,KAAKZ,KAAKa,MAAOC,EAAKd,KAAKS,QAGlDuH,EAAgB9H,UAAUyI,WAAa,WACnC3I,KAAKiJ,aAEDjJ,KAAKoI,MACLpI,KAAKa,MAAM6D,QAAQ,SAASrD,EAAGkI,GAC3B,IAAIlI,EAAEmI,gBAAgC,IAAZnI,EAAEoI,QAAyBpI,EAAEX,GAAKW,EAAEoI,OAK9D,IADA,IAAIvG,EAAO7B,EAAEX,EACNwC,GAAQ7B,EAAEoI,QAAQ,CACDzJ,KAAKa,MACpBkD,MAAM,EAAGwF,GACTT,KAAK1I,EAAM4C,YAAa,CAAC3B,EAAGA,EAAG6B,KAAMA,MAGtC7B,EAAEqI,QAAS,EACXrI,EAAEX,EAAIwC,KAERA,IAEPlD,MAEHA,KAAKa,MAAM6D,QAAQ,SAASrD,EAAGkI,GAC3B,IAAIlI,EAAE8H,OAGN,KAAa,EAAN9H,EAAEX,GAAO,CACZ,IAAIwC,EAAO7B,EAAEX,EAAI,EACbiJ,EAAmB,IAANJ,EAEjB,GAAQ,EAAJA,EAIAI,OAAqC,IAHjB3J,KAAKa,MACpBkD,MAAM,EAAGwF,GACTT,KAAK1I,EAAM4C,YAAa,CAAC3B,EAAGA,EAAG6B,KAAMA,IAI9C,IAAKyG,EACD,MAEJtI,EAAEqI,OAASrI,EAAEX,GAAKwC,EAClB7B,EAAEX,EAAIwC,IAEXlD,OAIXgI,EAAgB9H,UAAU0J,aAAe,SAAS3I,EAAM4I,GAqCpD,OApCA5I,EAAOb,EAAMkE,SAASrD,GAAQ,GAAI,CAACR,MAAO,EAAGE,OAAQ,EAAGH,EAAG,EAAGE,EAAG,KAE5DF,EAAIsJ,SAAS,GAAK7I,EAAKT,GAC5BS,EAAKP,EAAIoJ,SAAS,GAAK7I,EAAKP,GAC5BO,EAAKR,MAAQqJ,SAAS,GAAK7I,EAAKR,OAChCQ,EAAKN,OAASmJ,SAAS,GAAK7I,EAAKN,QACjCM,EAAK8I,aAAe9I,EAAK8I,eAAgB,EACzC9I,EAAK+I,SAAW/I,EAAK+I,WAAY,EACjC/I,EAAKgJ,OAAShJ,EAAKgJ,SAAU,EAEzBhJ,EAAKR,MAAQT,KAAKS,MAClBQ,EAAKR,MAAQT,KAAKS,MACXQ,EAAKR,MAAQ,IACpBQ,EAAKR,MAAQ,GAGbQ,EAAKN,OAAS,IACdM,EAAKN,OAAS,GAGdM,EAAKT,EAAI,IACTS,EAAKT,EAAI,GAGTS,EAAKT,EAAIS,EAAKR,MAAQT,KAAKS,QACvBoJ,EACA5I,EAAKR,MAAQT,KAAKS,MAAQQ,EAAKT,EAE/BS,EAAKT,EAAIR,KAAKS,MAAQQ,EAAKR,OAI/BQ,EAAKP,EAAI,IACTO,EAAKP,EAAI,GAGNO,GAGX+G,EAAgB9H,UAAU0I,QAAU,WAChC,IAAIsB,EAAO1F,MAAMtE,UAAU6D,MAAMU,KAAKxE,UAAW,GAGjD,GAFAiK,EAAK,QAAwB,IAAZA,EAAK,GAAqB,GAAK,CAACA,EAAK,IACtDA,EAAK,QAAwB,IAAZA,EAAK,IAA4BA,EAAK,IACnDlK,KAAKqI,eAAT,CAGA,IAAI8B,EAAeD,EAAK,GAAGE,OAAOpK,KAAKqK,iBACvCrK,KAAKiI,SAASkC,EAAcD,EAAK,MAGrClC,EAAgB9H,UAAUoK,WAAa,WAC/BtK,KAAKqI,gBAGTrI,KAAKa,MAAM6D,QAAQ,SAASrD,GAAKA,EAAEqI,QAAS,KAGhD1B,EAAgB9H,UAAUmK,cAAgB,WACtC,OAAOrK,KAAKa,MAAM0J,OAAO,SAASlJ,GAAK,OAAOA,EAAEqI,UAGpD1B,EAAgB9H,UAAUsK,QAAU,SAASvJ,EAAMwJ,GAW/C,QAR4B,KAF5BxJ,EAAOjB,KAAK4J,aAAa3I,IAETyJ,WAA2BzJ,EAAKR,MAAQS,KAAKyJ,IAAI1J,EAAKR,MAAOQ,EAAKyJ,gBACrD,IAAlBzJ,EAAK2J,YAA4B3J,EAAKN,OAASO,KAAKyJ,IAAI1J,EAAKN,OAAQM,EAAK2J,iBACzD,IAAjB3J,EAAK4J,WAA2B5J,EAAKR,MAAQS,KAAKC,IAAIF,EAAKR,MAAOQ,EAAK4J,gBACrD,IAAlB5J,EAAK6J,YAA4B7J,EAAKN,OAASO,KAAKC,IAAIF,EAAKN,OAAQM,EAAK6J,YAErF7J,EAAK8J,MAAQhD,EACb9G,EAAKyI,QAAS,EAEVzI,EAAK8I,aAAc,CACnB/J,KAAKiJ,aAEL,IAAK,IAAIM,EAAI,KAAMA,EAAG,CAClB,IAAI/I,EAAI+I,EAAIvJ,KAAKS,MACbC,EAAIQ,KAAK8J,MAAMzB,EAAIvJ,KAAKS,OAC5B,KAAID,EAAIS,EAAKR,MAAQT,KAAKS,SAGrBT,KAAKa,MAAMiI,KAAK1I,EAAM+C,sBAAuB,CAAC3C,EAAGA,EAAGE,EAAGA,EAAGO,KAAMA,IAAQ,CACzEA,EAAKT,EAAIA,EACTS,EAAKP,EAAIA,EACT,QAaZ,OARAV,KAAKa,MAAM0G,KAAKtG,QACc,IAAnBwJ,GAAkCA,GACzCzK,KAAKuI,YAAYhB,KAAKnH,EAAM0E,MAAM7D,IAGtCjB,KAAKgJ,eAAe/H,GACpBjB,KAAK2I,aACL3I,KAAK4I,UACE3H,GAGX+G,EAAgB9H,UAAU+K,WAAa,SAAShK,EAAMiK,GAClDA,OAAmC,IAAfA,GAAoCA,EACxDlL,KAAKwI,cAAcjB,KAAKnH,EAAM0E,MAAM7D,IACpCA,EAAK8J,IAAM,KACX/K,KAAKa,MAAQT,EAAMuD,QAAQ3D,KAAKa,MAAOI,GACvCjB,KAAK2I,aACL3I,KAAK4I,QAAQ3H,EAAMiK,IAGvBlD,EAAgB9H,UAAUiL,YAAc,SAASlK,EAAMT,EAAGE,EAAGD,EAAOE,GAChE,IAAKX,KAAKoL,sBAAsBnK,EAAMT,EAAGE,EAAGD,EAAOE,GAC/C,OAAO,EAEX,IAMI0K,EANAnC,EAAYrG,QAAQ7C,KAAKa,MAAMiI,KAAK,SAASzH,GAAK,OAAOA,EAAE8H,UAE/D,IAAKnJ,KAAKW,SAAWuI,EACjB,OAAO,EAIX,IAAIpE,EAAQ,IAAIkD,EACZhI,KAAKS,MACL,KACAT,KAAKoI,MACL,EACApI,KAAKa,MAAMG,IAAI,SAASK,GACpB,OAAIA,GAAKJ,EACLoK,EAAa/L,EAAEyF,OAAO,GAAI1D,GAGvB/B,EAAEyF,OAAO,GAAI1D,MAG5B,QAA0B,IAAfgK,EACP,OAAO,EAGXvG,EAAMuE,SAASgC,EAAY7K,EAAGE,EAAGD,EAAOE,GAExC,IAAI2K,GAAM,EAWV,OATIpC,IACAoC,IAAQzI,QAAQiC,EAAMjE,MAAMiI,KAAK,SAASzH,GACtC,OAAOA,GAAKgK,GAAcxI,QAAQxB,EAAE8H,SAAWtG,QAAQxB,EAAEqI,YAG7D1J,KAAKW,SACL2K,GAAOxG,EAAMyG,iBAAmBvL,KAAKW,QAGlC2K,GAGXtD,EAAgB9H,UAAUsL,+BAAiC,SAASvK,GAChE,IAAKjB,KAAKW,OACN,OAAO,EAGX,IAAImE,EAAQ,IAAIkD,EACZhI,KAAKS,MACL,KACAT,KAAKoI,MACL,EACApI,KAAKa,MAAMG,IAAI,SAASK,GAAK,OAAO/B,EAAEyF,OAAO,GAAI1D,MAErD,OADAyD,EAAM0F,QAAQvJ,GACP6D,EAAMyG,iBAAmBvL,KAAKW,QAGzCqH,EAAgB9H,UAAUkL,sBAAwB,SAASnK,EAAMT,EAAGE,EAAGD,EAAOE,GAW1E,MAVgB,iBAALH,IAAiBA,EAAIS,EAAKT,GACrB,iBAALE,IAAiBA,EAAIO,EAAKP,GACjB,iBAATD,IAAqBA,EAAQQ,EAAKR,OACxB,iBAAVE,IAAsBA,EAASM,EAAKN,aAEnB,IAAjBM,EAAKyJ,WAA2BjK,EAAQS,KAAKyJ,IAAIlK,EAAOQ,EAAKyJ,gBAC3C,IAAlBzJ,EAAK2J,YAA4BjK,EAASO,KAAKyJ,IAAIhK,EAAQM,EAAK2J,iBAC/C,IAAjB3J,EAAK4J,WAA2BpK,EAAQS,KAAKC,IAAIV,EAAOQ,EAAK4J,gBAC3C,IAAlB5J,EAAK6J,YAA4BnK,EAASO,KAAKC,IAAIR,EAAQM,EAAK6J,YAEvE7J,EAAKT,GAAKA,GAAKS,EAAKP,GAAKA,GAAKO,EAAKR,OAASA,GAASQ,EAAKN,QAAUA,GAM5EqH,EAAgB9H,UAAUmJ,SAAW,SAASpI,EAAMT,EAAGE,EAAGD,EAAOE,EAAQ8K,GACrE,IAAKzL,KAAKoL,sBAAsBnK,EAAMT,EAAGE,EAAGD,EAAOE,GAC/C,OAAOM,EAYX,GAVgB,iBAALT,IAAiBA,EAAIS,EAAKT,GACrB,iBAALE,IAAiBA,EAAIO,EAAKP,GACjB,iBAATD,IAAqBA,EAAQQ,EAAKR,OACxB,iBAAVE,IAAsBA,EAASM,EAAKN,aAEnB,IAAjBM,EAAKyJ,WAA2BjK,EAAQS,KAAKyJ,IAAIlK,EAAOQ,EAAKyJ,gBAC3C,IAAlBzJ,EAAK2J,YAA4BjK,EAASO,KAAKyJ,IAAIhK,EAAQM,EAAK2J,iBAC/C,IAAjB3J,EAAK4J,WAA2BpK,EAAQS,KAAKC,IAAIV,EAAOQ,EAAK4J,gBAC3C,IAAlB5J,EAAK6J,YAA4BnK,EAASO,KAAKC,IAAIR,EAAQM,EAAK6J,YAEvE7J,EAAKT,GAAKA,GAAKS,EAAKP,GAAKA,GAAKO,EAAKR,OAASA,GAASQ,EAAKN,QAAUA,EACpE,OAAOM,EAGX,IAAI4I,EAAW5I,EAAKR,OAASA,EAoB7B,OAnBAQ,EAAKyI,QAAS,EAEdzI,EAAKT,EAAIA,EACTS,EAAKP,EAAIA,EACTO,EAAKR,MAAQA,EACbQ,EAAKN,OAASA,EAEdM,EAAKyK,WAAalL,EAClBS,EAAK0K,WAAajL,EAClBO,EAAK2K,eAAiBnL,EACtBQ,EAAK4K,gBAAkBlL,EAEvBM,EAAOjB,KAAK4J,aAAa3I,EAAM4I,GAE/B7J,KAAKgJ,eAAe/H,GACfwK,IACDzL,KAAK2I,aACL3I,KAAK4I,WAEF3H,GAGX+G,EAAgB9H,UAAUqL,cAAgB,WACtC,OAAOvL,KAAKa,MAAMiL,OAAO,SAASC,EAAM1K,GAAK,OAAOH,KAAKC,IAAI4K,EAAM1K,EAAEX,EAAIW,EAAEV,SAAY,IAG3FqH,EAAgB9H,UAAU8L,YAAc,SAAS/K,GAC7CjB,KAAKa,MAAM6D,QAAQ,SAASrD,GACxBA,EAAEoI,OAASpI,EAAEX,IAEjBO,EAAKuI,WAAY,GAGrBxB,EAAgB9H,UAAU+L,UAAY,WAClCjM,KAAKa,MAAM6D,QAAQ,SAASrD,GACxBA,EAAEoI,OAASpI,EAAEX,IAEjB,IAAIW,EAAIrB,KAAKa,MAAMiI,KAAK,SAASzH,GAAK,OAAOA,EAAEmI,YAC3CnI,IACAA,EAAEmI,WAAY,IAItB,IAAI0C,EAAY,SAAS5G,EAAImC,GACzB,IACI0E,EAAeC,EADfC,EAAOrM,KAGXyH,EAAOA,GAAQ,GAEfzH,KAAKsM,UAAYhN,EAAEgG,QAGc,IAAtBmC,EAAK8E,eACZ9E,EAAK+E,YAAc/E,EAAK8E,aACxBpM,EAAa,eAAgB,qBAEF,IAApBsH,EAAKgF,aACZhF,EAAKiF,UAAYjF,EAAKgF,WACtBtM,EAAa,aAAc,mBAEO,IAA3BsH,EAAKkF,oBACZlF,EAAKmF,iBAAmBnF,EAAKkF,kBAC7BxM,EAAa,oBAAqB,0BAED,IAA1BsH,EAAKoF,mBACZpF,EAAKqF,gBAAkBrF,EAAKoF,iBAC5B1M,EAAa,mBAAoB,yBAEL,IAArBsH,EAAKsF,cACZtF,EAAKuF,WAAavF,EAAKsF,YACvB5M,EAAa,cAAe,oBAEI,IAAzBsH,EAAKwF,kBACZxF,EAAKyF,eAAiBzF,EAAKwF,gBAC3B9M,EAAa,kBAAmB,wBAEN,IAAnBsH,EAAK0F,YACZ1F,EAAKoD,SAAWpD,EAAK0F,UACrBhN,EAAa,YAAa,kBAEE,IAArBsH,EAAK2F,cACZ3F,EAAK4F,WAAa5F,EAAK2F,YACvBjN,EAAa,cAAe,oBAEF,IAAnBsH,EAAK6F,YACZ7F,EAAK8F,SAAW9F,EAAK6F,UACrBnN,EAAa,YAAa,kBAEgB,IAAnCsH,EAAK+F,4BACZ/F,EAAKgG,uBAAyBhG,EAAK+F,0BACnCrN,EAAa,4BAA6B,2BAI9CsH,EAAKiF,UAAYjF,EAAKiF,WAAa,kBACnC,IAAIa,EAAiE,EAAtDvN,KAAKsM,UAAUoB,QAAQ,IAAMjG,EAAKiF,WAAWiB,OAsG5D,GApGA3N,KAAKyH,KAAOrH,EAAMkE,SAASmD,GAAQ,GAAI,CACnChH,MAAOqJ,SAAS9J,KAAKsM,UAAUsB,KAAK,mBAAqB,GACzDjN,OAAQmJ,SAAS9J,KAAKsM,UAAUsB,KAAK,oBAAsB,EAC3DlB,UAAW,kBACXE,iBAAkB,yBAClBE,gBAAiB,GACjBe,OAAQ,2BACRrB,YAAa,KACbQ,WAAY,GACZE,eAAgB,GAChBY,MAAM,EACNjD,SAAU,IACVzC,OAAO,EACPiF,YAAY,EACZU,OAAQ,wBAA0C,IAAhB7M,KAAK8M,UAAkBC,QAAQ,GACjEC,QAASrL,QAAQ7C,KAAKsM,UAAUsB,KAAK,sBAAuB,EAC5DH,uBAAwBhG,EAAKgG,yBAA0B,EACvDjG,UAAWpH,EAAMkE,SAASmD,EAAKD,WAAa,GAAI,CAC5C2G,UAAY1G,EAAKgG,uBACjBW,QAAS,OAEb1G,UAAWtH,EAAMkE,SAASmD,EAAKC,WAAa,GAAI,CAC5CmG,QAASpG,EAAK+E,YAAc,IAAM/E,EAAK+E,YAAe/E,EAAKoG,OAASpG,EAAKoG,OAAS,KAC9E,2BACJQ,QAAQ,EACRC,SAAU,SAEdC,YAAa9G,EAAK8G,cAAe,EACjCC,cAAe/G,EAAK+G,gBAAiB,EACrCC,IAAK,OACLC,WAAW,EACXC,iBAAkBvO,EAAMkE,SAASmD,EAAKkH,kBAAoB,GAAI,CAC1DC,OAAQ,IAAMnH,EAAKiF,YAEvBmC,cAAe,IACfC,mBAAoB,KACpBC,eAAgB,KAChBC,qBAAsBvH,EAAKuH,uBAAwB,EACnDC,mBAAoBxH,EAAKwH,oBAAsB,6BAC/CC,SAAU,QAGa,IAAvBlP,KAAKyH,KAAKyH,SACVlP,KAAKyH,KAAKyH,SAAWpI,EACS,OAAvB9G,KAAKyH,KAAKyH,WACjBlP,KAAKyH,KAAKyH,SAAWpI,EAAwBM,kBAAkB,IAAMN,GAGzE9G,KAAKmP,GAAK,IAAInP,KAAKyH,KAAKyH,SAASlP,MAEX,SAAlBA,KAAKyH,KAAKgH,MACVzO,KAAKyH,KAAKgH,IAA0C,QAApCzO,KAAKsM,UAAU8C,IAAI,cAGnCpP,KAAKyH,KAAKgH,KACVzO,KAAKsM,UAAU+C,SAAS,kBAG5BrP,KAAKyH,KAAK8F,SAAWA,GAErBnB,EAA4C,SAAzBpM,KAAKyH,KAAKuF,YAEzBX,EAAKW,WAAWX,EAAKiD,aAAa,GAElCtP,KAAKgN,WAAWhN,KAAKyH,KAAKuF,YAAY,GAE1ChN,KAAKkN,eAAelN,KAAKyH,KAAKyF,gBAAgB,GAE9ClN,KAAKsM,UAAU+C,SAASrP,KAAKyH,KAAKsG,QAElC/N,KAAKuP,kBAEDhC,GACAvN,KAAKsM,UAAU+C,SAAS,qBAG5BrP,KAAKwP,cAELxP,KAAK+G,KAAO,IAAIiB,EAAgBhI,KAAKyH,KAAKhH,MAAO,SAASI,EAAOqK,GAC7DA,OAAmC,IAAfA,GAAoCA,EACxD,IAAIN,EAAY,EAChB5K,KAAKa,MAAM6D,QAAQ,SAASrD,GACxBuJ,EAAY1J,KAAKC,IAAIyJ,EAAWvJ,EAAEX,EAAIW,EAAEV,UAE5CE,EAAM6D,QAAQ,SAASrD,GACf6J,GAAwB,OAAV7J,EAAE0J,IACZ1J,EAAEiE,IACFjE,EAAEiE,GAAGnD,SAGTd,EAAEiE,GACGsI,KAAK,YAAavM,EAAEb,GACpBoN,KAAK,YAAavM,EAAEX,GACpBkN,KAAK,gBAAiBvM,EAAEZ,OACxBmN,KAAK,iBAAkBvM,EAAEV,UAGtC0L,EAAKoD,cAAc7E,EAAY,KAChC5K,KAAKyH,KAAKW,MAAOpI,KAAKyH,KAAK9G,QAE1BX,KAAKyH,KAAKqG,KAAM,CAChB,IAAI4B,EAAW,GACXC,EAAQ3P,KACZA,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,UAAY,SAAW1M,KAAKyH,KAAKmF,iBAAmB,KACvFiD,KAAK,SAAStN,EAAO+C,GACtBA,EAAKhG,EAAEgG,GACPoK,EAASnI,KAAK,CACVjC,GAAIA,EACJiE,EAAGO,SAASxE,EAAGsI,KAAK,cAAgB9D,SAASxE,EAAGsI,KAAK,cAAgB+B,EAAMlI,KAAKhH,UAGxFL,EAAMgB,OAAOsO,EAAU,SAASlP,GAAK,OAAOA,EAAE+I,IAAM7E,QAAQ,SAAS6E,GACjEvJ,KAAK8P,gBAAgBvG,EAAEjE,KACxBtF,MAmEP,GAhEAA,KAAK+P,aAAa/P,KAAKyH,KAAKyG,SAE5BlO,KAAKgQ,YAAc1Q,EACf,eAAiBU,KAAKyH,KAAKmF,iBAAmB,IAAM5M,KAAKyH,KAAKiF,UAAY,sCACpC1M,KAAKyH,KAAKqF,gBAAkB,gBAAgBmD,OAEtFjQ,KAAKkQ,yBAELlQ,KAAKmQ,uBAAyB/P,EAAM4E,SAAS,WACzCqH,EAAKW,WAAWX,EAAKiD,aAAa,IACnC,KAEHtP,KAAKoQ,gBAAkB,WAKnB,GAJIhE,GACAC,EAAK8D,yBAGL9D,EAAKgE,qBAAuBhE,EAAK5E,KAAKuH,qBAAsB,CAC5D,GAAI7C,EACA,OAEJE,EAAKC,UAAU+C,SAAShD,EAAK5E,KAAKwH,oBAClC9C,GAAgB,EAEhBE,EAAKtF,KAAKkC,aACVoD,EAAKtF,KAAKlG,MAAM6D,QAAQ,SAASzD,GAC7BoL,EAAKC,UAAUgE,OAAOrP,EAAKqE,IAEvB+G,EAAK5E,KAAK4F,aAGdhB,EAAK8C,GAAGzH,UAAUzG,EAAKqE,GAAI,WAC3B+G,EAAK8C,GAAG3H,UAAUvG,EAAKqE,GAAI,WAE3BrE,EAAKqE,GAAGiL,QAAQ,iBAEjB,CACH,IAAKpE,EACD,OAMJ,GAHAE,EAAKC,UAAUkE,YAAYnE,EAAK5E,KAAKwH,oBACrC9C,GAAgB,EAEZE,EAAK5E,KAAK4F,WACV,OAGJhB,EAAKtF,KAAKlG,MAAM6D,QAAQ,SAASzD,GACxBA,EAAKgJ,QAAWoC,EAAK5E,KAAK8G,aAC3BlC,EAAK8C,GAAGzH,UAAUzG,EAAKqE,GAAI,UAE1BrE,EAAK+I,UAAaqC,EAAK5E,KAAK+G,eAC7BnC,EAAK8C,GAAG3H,UAAUvG,EAAKqE,GAAI,UAG/BrE,EAAKqE,GAAGiL,QAAQ,cAK5BjR,EAAED,QAAQoR,OAAOzQ,KAAKoQ,iBACtBpQ,KAAKoQ,mBAEA/D,EAAK5E,KAAK4F,YAA6C,iBAAxBhB,EAAK5E,KAAKiH,UAAwB,CAClE,IAAIgC,EAAYpR,EAAE+M,EAAK5E,KAAKiH,WACvB1O,KAAKmP,GAAGvH,YAAY8I,IACrB1Q,KAAKmP,GAAGxH,UAAU+I,EAAWrE,EAAK5E,KAAKkH,kBAE3C3O,KAAKmP,GACAtH,GAAG6I,EAAW,WAAY,SAASC,EAAO5K,GACvC,IAAIT,EAAKhG,EAAEyG,EAAG2B,WACHpC,EAAGsL,KAAK,mBACVC,QAAUxE,IAGnB/G,EAAGsL,KAAK,eAAe,GACvBvE,EAAKyE,sBAAsBxL,MAE9BuC,GAAG6I,EAAW,UAAW,SAASC,EAAO5K,GACtC,IAAIT,EAAKhG,EAAEyG,EAAG2B,WACHpC,EAAGsL,KAAK,mBACVC,QAAUxE,IAGnB/G,EAAGsL,KAAK,eAAe,GACvBvE,EAAK0E,sBAAsBzL,MAIvC,IAAK+G,EAAK5E,KAAK4F,YAAchB,EAAK5E,KAAKuJ,cAAe,CAClD,IAAIC,EAAkB,KAElBC,EAAS,SAASP,EAAO5K,GACzB,IAAIT,EAAK2L,EACLhQ,EAAOqE,EAAGsL,KAAK,mBACfO,EAAM9E,EAAK+E,iBAAiB,CAAClN,KAAMyM,EAAMU,MAAO5L,IAAKkL,EAAMW,QAAQ,GACnE9Q,EAAIU,KAAKC,IAAI,EAAGgQ,EAAI3Q,GACpBE,EAAIQ,KAAKC,IAAI,EAAGgQ,EAAIzQ,GACnBO,EAAKsQ,SACNtQ,EAAKsQ,QAAS,EAEdtQ,EAAKqE,GAAKA,EACVrE,EAAK8I,cAAe,EACpB9I,EAAKT,EAAIA,EACTS,EAAKP,EAAIA,EACT2L,EAAKtF,KAAKuD,aACV+B,EAAKtF,KAAKiF,YAAY/K,GACtBoL,EAAKtF,KAAKyD,QAAQvJ,GAElBoL,EAAKC,UAAUgE,OAAOjE,EAAK2D,aAC3B3D,EAAK2D,YACApC,KAAK,YAAa3M,EAAKT,GACvBoN,KAAK,YAAa3M,EAAKP,GACvBkN,KAAK,gBAAiB3M,EAAKR,OAC3BmN,KAAK,iBAAkB3M,EAAKN,QAC5B6Q,OACLvQ,EAAKqE,GAAK+G,EAAK2D,YACf/O,EAAKwQ,aAAexQ,EAAKT,EACzBS,EAAKyQ,aAAezQ,EAAKP,EAEzB2L,EAAK6D,0BAEJ7D,EAAKtF,KAAKoE,YAAYlK,EAAMT,EAAGE,KAGpC2L,EAAKtF,KAAKsC,SAASpI,EAAMT,EAAGE,GAC5B2L,EAAK6D,2BAGTlQ,KAAKmP,GACAxH,UAAU0E,EAAKC,UAAW,CACvBsC,OAAQ,SAAStJ,GAEb,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACnB,QAAI3P,GAAQA,EAAK4P,QAAUxE,IAGpB/G,EAAGqM,IAA+B,IAA5BtF,EAAK5E,KAAKuJ,cAAyB,mBAAqB3E,EAAK5E,KAAKuJ,kBAGtFnJ,GAAGwE,EAAKC,UAAW,WAAY,SAASqE,EAAO5K,GAC/BsG,EAAKC,UAAUsF,SAA5B,IACItM,EAAKhG,EAAEyG,EAAG2B,WACV4H,EAAYjD,EAAKiD,YACjBtC,EAAaX,EAAKW,aAClB6E,EAAWvM,EAAGsL,KAAK,mBAEnBnQ,EAAQoR,EAAWA,EAASpR,MAASS,KAAK4Q,KAAKxM,EAAGyM,aAAezC,GACjE3O,EAASkR,EAAWA,EAASlR,OAAUO,KAAK4Q,KAAKxM,EAAG0M,cAAgBhF,GAExEiE,EAAkB3L,EAElB,IAAIrE,EAAOoL,EAAKtF,KAAK6C,aAAa,CAACnJ,MAAOA,EAAOE,OAAQA,EAAQ4Q,QAAQ,EAAOU,YAAY,IAC5F3M,EAAGsL,KAAK,kBAAmB3P,GAC3BqE,EAAGsL,KAAK,uBAAwBiB,GAEhCvM,EAAGuC,GAAG,OAAQqJ,KAEjBrJ,GAAGwE,EAAKC,UAAW,UAAW,SAASqE,EAAO5K,GAC3C,IAAIT,EAAKhG,EAAEyG,EAAG2B,WACd,GAAKpC,EAAGsL,KAAK,mBAAb,CAGAtL,EAAG4M,OAAO,OAAQhB,GAClB,IAAIjQ,EAAOqE,EAAGsL,KAAK,mBACnB3P,EAAKqE,GAAK,KACV+G,EAAKtF,KAAKkE,WAAWhK,GACrBoL,EAAK2D,YAAYmC,SACjB9F,EAAK6D,yBACL5K,EAAGsL,KAAK,kBAAmBtL,EAAGsL,KAAK,4BAEtC/I,GAAGwE,EAAKC,UAAW,OAAQ,SAASqE,EAAO5K,GACxCsG,EAAK2D,YAAYmC,SAEjB,IAAIlR,EAAO3B,EAAEyG,EAAG2B,WAAWkJ,KAAK,mBAChC3P,EAAK4P,MAAQxE,EACb,IAAI/G,EAAKhG,EAAEyG,EAAG2B,WAAW5C,OAAM,GAC/BQ,EAAGsL,KAAK,kBAAmB3P,GAC3B,IAAImR,EAAe9S,EAAEyG,EAAG2B,WAAWkJ,KAAK,6BACZ,IAAjBwB,QAA8D,IAAvBA,EAAavB,OAC3DuB,EAAavB,MAAMwB,sBAEvB/S,EAAEyG,EAAGuM,QAAQnQ,SACblB,EAAKqE,GAAKA,EACV+G,EAAK2D,YAAYC,OACjB7P,EAAMiF,wBAAwBC,GAC9BA,EAAGwD,KAAK,2BAA2B3G,SAEnCmD,EACKsI,KAAK,YAAa3M,EAAKT,GACvBoN,KAAK,YAAa3M,EAAKP,GACvBkN,KAAK,gBAAiB3M,EAAKR,OAC3BmN,KAAK,iBAAkB3M,EAAKN,QAC5B0O,SAAShD,EAAK5E,KAAKiF,WACnB6F,kBACAC,WAAW,aACXhC,YAAY,4DACZ0B,OAAO,OAAQhB,GACpB7E,EAAKC,UAAUgE,OAAOhL,GACtB+G,EAAKoG,uBAAuBnN,EAAIrE,GAChCoL,EAAK6D,yBACL7D,EAAKtF,KAAKwB,YAAYhB,KAAKtG,GAC3BoL,EAAKqG,mBACLrG,EAAKsG,sBAELtG,EAAKtF,KAAKkF,YACV3M,EAAEyG,EAAG2B,WAAWwK,OAAO,OAAQhB,GAC/B5R,EAAEyG,EAAG2B,WAAW8K,WAAW,mBAC3BlT,EAAEyG,EAAG2B,WAAW8K,WAAW,wBAC3BnG,EAAKC,UAAUiE,QAAQ,UAAW,CAAC6B,EAAcnR,QAi3BjE,OA52BAiL,EAAUhM,UAAUyS,oBAAsB,SAASC,GAC/C,IAAIlD,EAAW1P,KAAK+G,KAAKsD,gBACrBwI,GAAa,EAEbC,EAAc,GACdpD,GAAYA,EAAS/B,SACrBmF,EAAYvL,KAAKmI,GACjBmD,GAAa,IAGbA,IAA+B,IAAjBD,IACd5S,KAAKsM,UAAUiE,QAAQ,SAAUuC,IAIzC5G,EAAUhM,UAAUwS,iBAAmB,WAC/B1S,KAAK+G,KAAKwB,aAA8C,EAA/BvI,KAAK+G,KAAKwB,YAAYoF,SAC/C3N,KAAKsM,UAAUiE,QAAQ,QAAS,CAACvQ,KAAK+G,KAAKwB,YAAYvH,IAAIZ,EAAM0E,SACjE9E,KAAK+G,KAAKwB,YAAc,KAIhC2D,EAAUhM,UAAUmS,oBAAsB,WAClCrS,KAAK+G,KAAKyB,eAAkD,EAAjCxI,KAAK+G,KAAKyB,cAAcmF,SACnD3N,KAAKsM,UAAUiE,QAAQ,UAAW,CAACvQ,KAAK+G,KAAKyB,cAAcxH,IAAIZ,EAAM0E,SACrE9E,KAAK+G,KAAKyB,cAAgB,KAIlC0D,EAAUhM,UAAUsP,YAAc,WAC1BxP,KAAK+S,WACL3S,EAAM8B,iBAAiBlC,KAAK+S,WAEhC/S,KAAK+S,UAAY,oBAAsC,IAAhB7R,KAAK8M,UAAmBC,UAC/DjO,KAAKgT,QAAU5S,EAAMkB,iBAAiBtB,KAAK+S,WACtB,OAAjB/S,KAAKgT,UACLhT,KAAKgT,QAAQC,KAAO,IAI5B/G,EAAUhM,UAAUuP,cAAgB,SAAS7E,GACzC,GAAqB,OAAjB5K,KAAKgT,cAA4C,IAAjBhT,KAAKgT,QAAzC,CAIA,IAEIE,EAFAC,EAAS,IAAMnT,KAAKyH,KAAKsG,OAAS,KAAO/N,KAAKyH,KAAKiF,UACnDL,EAAOrM,KAQX,QALwB,IAAb4K,IACPA,EAAY5K,KAAKgT,QAAQC,MAE7BjT,KAAKwP,cACLxP,KAAKkQ,yBACAlQ,KAAKyH,KAAKuF,cAGW,IAAtBhN,KAAKgT,QAAQC,MAAcrI,GAAa5K,KAAKgT,QAAQC,QAUrDC,EANClT,KAAKyH,KAAKyF,gBAAkBlN,KAAKyH,KAAKsH,iBAAmB/O,KAAKyH,KAAKqH,mBAMxD,SAASsE,EAAQC,GACzB,OAAKD,GAAWC,EAIT,SAAYhH,EAAK5E,KAAKuF,WAAaoG,EAAU/G,EAAK5E,KAAKsH,gBAAkB,OAC1E1C,EAAK5E,KAAKyF,eAAiBmG,EAAahH,EAAK5E,KAAKqH,oBAAsB,IAJlEzC,EAAK5E,KAAKuF,WAAaoG,EAAS/G,EAAK5E,KAAKyF,eAAiBmG,EAC/DhH,EAAK5E,KAAKsH,gBARV,SAASqE,EAAQC,GACzB,OAAQhH,EAAK5E,KAAKuF,WAAaoG,EAAS/G,EAAK5E,KAAKyF,eAAiBmG,EAC/DhH,EAAK5E,KAAKsH,gBAaI,IAAtB/O,KAAKgT,QAAQC,MACb7S,EAAMgC,cAAcpC,KAAKgT,QAASG,EAAQ,eAAiBD,EAAU,EAAG,GAAK,IAAK,GAGlFtI,EAAY5K,KAAKgT,QAAQC,MAAM,CAC/B,IAAK,IAAI1J,EAAIvJ,KAAKgT,QAAQC,KAAM1J,EAAIqB,IAAarB,EAC7CnJ,EAAMgC,cAAcpC,KAAKgT,QACrBG,EAAS,qBAAuB5J,EAAI,GAAK,KACzC,WAAa2J,EAAU3J,EAAI,EAAGA,GAAK,IACnCA,GAEJnJ,EAAMgC,cAAcpC,KAAKgT,QACrBG,EAAS,yBAA2B5J,EAAI,GAAK,KAC7C,eAAiB2J,EAAU3J,EAAI,EAAGA,GAAK,IACvCA,GAEJnJ,EAAMgC,cAAcpC,KAAKgT,QACrBG,EAAS,yBAA2B5J,EAAI,GAAK,KAC7C,eAAiB2J,EAAU3J,EAAI,EAAGA,GAAK,IACvCA,GAEJnJ,EAAMgC,cAAcpC,KAAKgT,QACrBG,EAAS,eAAiB5J,EAAI,KAC9B,QAAU2J,EAAU3J,EAAGA,GAAK,IAC5BA,GAGRvJ,KAAKgT,QAAQC,KAAOrI,KAI5BsB,EAAUhM,UAAUgQ,uBAAyB,WACzC,IAAIlQ,KAAK+G,KAAKsB,eAAd,CAGA,IAAI1H,EAASX,KAAK+G,KAAKwE,gBAEnB+H,EAAexJ,SAAS9J,KAAKsM,UAAU8C,IAAI,eAC/C,GAAmB,EAAfkE,EAAkB,CAClB,IAAIxI,GAAawI,EAAetT,KAAKyH,KAAKyF,iBAAmBlN,KAAKgN,aAAehN,KAAKyH,KAAKyF,gBACvFvM,EAASmK,IACTnK,EAASmK,GAGjB9K,KAAKsM,UAAUsB,KAAK,yBAA0BjN,GACzCX,KAAKyH,KAAKuF,aAGVhN,KAAKyH,KAAKyF,eAEJlN,KAAKyH,KAAKsH,iBAAmB/O,KAAKyH,KAAKqH,mBAC9C9O,KAAKsM,UAAU8C,IAAI,SAAWzO,GAAUX,KAAKyH,KAAKuF,WAAahN,KAAKyH,KAAKyF,gBACrElN,KAAKyH,KAAKyF,eAAkBlN,KAAKyH,KAAKsH,gBAE1C/O,KAAKsM,UAAU8C,IAAI,SAAU,SAAYzO,EAAUX,KAAKyH,KAAe,WAAKzH,KAAKyH,KAAKsH,gBAClF,OAAUpO,GAAUX,KAAKyH,KAAKyF,eAAiB,GAAMlN,KAAKyH,KAAKqH,oBAAsB,KANzF9O,KAAKsM,UAAU8C,IAAI,SAAWzO,EAAUX,KAAKyH,KAAe,WAAKzH,KAAKyH,KAAKsH,mBAUnF7C,EAAUhM,UAAUmQ,iBAAmB,WACnC,OAAQhR,OAAOkU,YAAc9R,SAAS4E,gBAAgBmN,aAAe/R,SAASgS,KAAKD,cAC/ExT,KAAKyH,KAAKoD,UAGlBqB,EAAUhM,UAAU4Q,sBAAwB,SAASxL,GACjD,IACIrE,EAAO3B,EAAEgG,GAAIsL,KAAK,oBAElB3P,EAAKyS,gBAHE1T,KAGsByH,KAAKiH,YAGtCzN,EAAKyS,eAAiBtO,WAAW,WAC7BE,EAAG+J,SAAS,4BACZpO,EAAK0S,kBAAmB,GARjB3T,KASHyH,KAAKoH,iBAGjB3C,EAAUhM,UAAU6Q,sBAAwB,SAASzL,GACjD,IAAIrE,EAAO3B,EAAEgG,GAAIsL,KAAK,mBAEjB3P,EAAKyS,iBAGVE,aAAa3S,EAAKyS,gBAClBzS,EAAKyS,eAAiB,KACtBpO,EAAGkL,YAAY,4BACfvP,EAAK0S,kBAAmB,IAG5BzH,EAAUhM,UAAUuS,uBAAyB,SAASnN,EAAIrE,GACtD,IAEIqO,EACAtC,EAHAX,EAAOrM,KAKP6T,EAAe,SAASlD,EAAO5K,GAC/B,IAEItF,EACAE,EAHAH,EAAIU,KAAK4S,MAAM/N,EAAGR,SAASrB,KAAOoL,GAClC5O,EAAIQ,KAAK8J,OAAOjF,EAAGR,SAASE,IAAMuH,EAAa,GAAKA,GASxD,GALkB,QAAd2D,EAAMoD,OACNtT,EAAQS,KAAK4S,MAAM/N,EAAGiO,KAAKvT,MAAQ6O,GACnC3O,EAASO,KAAK4S,MAAM/N,EAAGiO,KAAKrT,OAASqM,IAGvB,QAAd2D,EAAMoD,KAAgB,CACtB,IAAI/N,EAAWD,EAAGR,SAASE,IAAMxE,EAAKgT,UAGtC,GAFAhT,EAAKgT,UAAYlO,EAAGR,SAASE,IAC7BrF,EAAM0F,qBAAqBR,EAAG,GAAIS,EAAIC,GAClCV,EAAGsL,KAAK,gBAAkBpQ,EAAI,GAAKA,GAAK6L,EAAKtF,KAAKtG,OAASC,EAAI,IAC7D2L,EAAKtF,KAAKqB,OAAS1H,EAAI2L,EAAKtF,KAAKwE,gBAAkB,CACrD,GAAKtK,EAAKiT,kBAeN,QAd4B,IAAxB7H,EAAK5E,KAAKiH,WACVrC,EAAKyE,sBAAsBxL,GAG/B9E,EAAIS,EAAKwQ,aACT/Q,EAAIO,EAAKyQ,aAETrF,EAAK2D,YAAYmC,SACjB9F,EAAK2D,YAAYC,OACjB5D,EAAKtF,KAAKkE,WAAWhK,GACrBoL,EAAK6D,yBAELjP,EAAKiT,mBAAoB,OAK7B7H,EAAK0E,sBAAsBzL,GAEvBrE,EAAKiT,oBACL7H,EAAKtF,KAAKyD,QAAQvJ,GAClBoL,EAAK2D,YACApC,KAAK,YAAapN,GAClBoN,KAAK,YAAalN,GAClBkN,KAAK,gBAAiBnN,GACtBmN,KAAK,iBAAkBjN,GACvB6Q,OACLnF,EAAKC,UAAUgE,OAAOjE,EAAK2D,aAC3B/O,EAAKqE,GAAK+G,EAAK2D,YACf/O,EAAKiT,mBAAoB,QAG9B,GAAkB,UAAdvD,EAAMoD,MACTvT,EAAI,EACJ,OAIR,IAAIoL,OAAkC,IAAVnL,EAAwBA,EAAQQ,EAAK2K,eAC7DC,OAAoC,IAAXlL,EAAyBA,EAASM,EAAK4K,iBAC/DQ,EAAKtF,KAAKoE,YAAYlK,EAAMT,EAAGE,EAAGD,EAAOE,IACzCM,EAAKyK,aAAelL,GAAKS,EAAK0K,aAAejL,GAC9CO,EAAK2K,iBAAmBA,GAAkB3K,EAAK4K,kBAAoBA,IAGvE5K,EAAKyK,WAAalL,EAClBS,EAAK0K,WAAajL,EAClBO,EAAK2K,eAAiBnL,EACtBQ,EAAK4K,gBAAkBlL,EACvB0L,EAAKtF,KAAKsC,SAASpI,EAAMT,EAAGE,EAAGD,EAAOE,GACtC0L,EAAK6D,yBAEa,UAAdS,EAAMoD,MACNzU,EAAEqR,EAAMpM,QAAQgM,QAAQ,WAAYtP,KAIxCkT,EAAgB,SAASxD,EAAO5K,GAChCsG,EAAKC,UAAUgE,OAAOjE,EAAK2D,aAC3B,IAAIoE,EAAI9U,EAAEU,MACVqM,EAAKtF,KAAKuD,aACV+B,EAAKtF,KAAKiF,YAAY/K,GACtBqO,EAAYjD,EAAKiD,YACjB,IAAI+E,EAAmBnT,KAAK4Q,KAAKsC,EAAEpC,cAAgBoC,EAAExG,KAAK,mBAC1DZ,EAAaX,EAAKC,UAAU3L,SAAWmJ,SAASuC,EAAKC,UAAUsB,KAAK,2BACpEvB,EAAK2D,YACApC,KAAK,YAAawG,EAAExG,KAAK,cACzBA,KAAK,YAAawG,EAAExG,KAAK,cACzBA,KAAK,gBAAiBwG,EAAExG,KAAK,kBAC7BA,KAAK,iBAAkBwG,EAAExG,KAAK,mBAC9B4D,OACLvQ,EAAKqE,GAAK+G,EAAK2D,YACf/O,EAAKwQ,aAAexQ,EAAKT,EACzBS,EAAKyQ,aAAezQ,EAAKP,EACzBO,EAAKgT,UAAYlO,EAAGR,SAASE,IAE7B4G,EAAK8C,GAAG3H,UAAUlC,EAAI,SAAU,WAAYgK,GAAarO,EAAK4J,UAAY,IAC1EwB,EAAK8C,GAAG3H,UAAUlC,EAAI,SAAU,YAAa+O,GAAoBpT,EAAK6J,WAAa,IAEjE,eAAd6F,EAAMoD,MACNK,EAAEtL,KAAK,oBAAoByH,QAAQ,gBAIvC+D,EAAc,SAAS3D,EAAO5K,GAC9B,IAAIqO,EAAI9U,EAAEU,MACV,GAAKoU,EAAExD,KAAK,mBAAZ,CAIA,IAAI2D,GAAc,EAKlB,GAJAlI,EAAK2D,YAAYmC,SACjBlR,EAAKqE,GAAK8O,EACV/H,EAAK2D,YAAYC,OAEbhP,EAAK0S,iBACLY,GAAc,EACKjP,EAAGsL,KAAK,mBAAmBC,MACjCwB,sBACb/M,EAAGkN,WAAW,mBACdlN,EAAGnD,cAEHkK,EAAK0E,sBAAsBzL,GACtBrE,EAAKiT,mBAQN9T,EAAMiF,wBAAwB+O,GAC9BA,EACKxG,KAAK,YAAa3M,EAAKwQ,cACvB7D,KAAK,YAAa3M,EAAKyQ,cACvB9D,KAAK,gBAAiB3M,EAAKR,OAC3BmN,KAAK,iBAAkB3M,EAAKN,QACjCM,EAAKT,EAAIS,EAAKwQ,aACdxQ,EAAKP,EAAIO,EAAKyQ,aACdzQ,EAAKiT,mBAAoB,EACzB7H,EAAKtF,KAAKyD,QAAQvJ,KAhBlBb,EAAMiF,wBAAwB+O,GAC9BA,EACKxG,KAAK,YAAa3M,EAAKT,GACvBoN,KAAK,YAAa3M,EAAKP,GACvBkN,KAAK,gBAAiB3M,EAAKR,OAC3BmN,KAAK,iBAAkB3M,EAAKN,SAczC0L,EAAK6D,yBACL7D,EAAKsG,oBAAoB4B,GAEzBlI,EAAKtF,KAAKkF,YAEV,IAAIuI,EAAcJ,EAAEtL,KAAK,eACrB0L,EAAY7G,QAAwB,cAAdgD,EAAMoD,OAC5BS,EAAY3E,KAAK,SAAStN,EAAO+C,GAC7BhG,EAAEgG,GAAIsL,KAAK,aAAaR,oBAE5BgE,EAAEtL,KAAK,oBAAoByH,QAAQ,cACnC6D,EAAEtL,KAAK,oBAAoByH,QAAQ,iBAErB,cAAdI,EAAMoD,MACN1H,EAAKC,UAAUiE,QAAQ,eAAgB6D,KAI/CpU,KAAKmP,GACAzH,UAAUpC,EAAI,CACXmP,MAAON,EACPO,KAAMJ,EACNK,KAAMd,IAETrM,UAAUlC,EAAI,CACXmP,MAAON,EACPO,KAAMJ,EACN7D,OAAQoD,KAGZ5S,EAAKgJ,QAAWjK,KAAKqQ,qBAAuBhE,EAAK5E,KAAKuH,sBAAyBhP,KAAKyH,KAAK8G,aACzFvO,KAAKyH,KAAK4F,aACVrN,KAAKmP,GAAGzH,UAAUpC,EAAI,YAGtBrE,EAAK+I,UAAahK,KAAKqQ,qBAAuBhE,EAAK5E,KAAKuH,sBAAyBhP,KAAKyH,KAAK+G,eAC3FxO,KAAKyH,KAAK4F,aACVrN,KAAKmP,GAAG3H,UAAUlC,EAAI,WAG1BA,EAAGsI,KAAK,iBAAkB3M,EAAKkI,OAAS,MAAQ,OAGpD+C,EAAUhM,UAAU4P,gBAAkB,SAASxK,EAAImF,GAC/CA,OAA4C,IAAnBA,GAAiCA,GAE1DnF,EAAKhG,EAAEgG,IAEJ+J,SAASrP,KAAKyH,KAAKiF,WACtB,IAAIzL,EAJOjB,KAIK+G,KAAKyD,QAAQ,CACzBhK,EAAGsJ,SAASxE,EAAGsI,KAAK,aAAc,IAClClN,EAAGoJ,SAASxE,EAAGsI,KAAK,aAAc,IAClCnN,MAAO6E,EAAGsI,KAAK,iBACfjN,OAAQ2E,EAAGsI,KAAK,kBAChBlD,SAAUpF,EAAGsI,KAAK,qBAClB/C,SAAUvF,EAAGsI,KAAK,qBAClBhD,UAAWtF,EAAGsI,KAAK,sBACnB9C,UAAWxF,EAAGsI,KAAK,sBACnB7D,aAAc3J,EAAMsC,OAAO4C,EAAGsI,KAAK,0BACnC5D,SAAU5J,EAAMsC,OAAO4C,EAAGsI,KAAK,sBAC/B3D,OAAQ7J,EAAMsC,OAAO4C,EAAGsI,KAAK,oBAC7BzE,OAAQ/I,EAAMsC,OAAO4C,EAAGsI,KAAK,mBAC7BgH,cAAetP,EAAGsI,KAAK,0BACvBtI,GAAIA,EACJ/D,GAAI+D,EAAGsI,KAAK,cACZiD,MApBO7Q,MAqBRyK,GACHnF,EAAGsL,KAAK,kBAAmB3P,GAE3BjB,KAAKyS,uBAAuBnN,EAAIrE,IAGpCiL,EAAUhM,UAAU6P,aAAe,SAAS8E,GACpCA,EACA7U,KAAKsM,UAAU+C,SAAS,sBAExBrP,KAAKsM,UAAUkE,YAAY,uBAInCtE,EAAUhM,UAAU4U,UAAY,SAASxP,EAAI9E,EAAGE,EAAGD,EAAOE,EAAQoJ,EAAcc,EAAUH,EACtFI,EAAWF,EAAWrJ,GAkBtB,OAjBA+D,EAAKhG,EAAEgG,QACS,IAAL9E,GAAoB8E,EAAGsI,KAAK,YAAapN,QACpC,IAALE,GAAoB4E,EAAGsI,KAAK,YAAalN,QAChC,IAATD,GAAwB6E,EAAGsI,KAAK,gBAAiBnN,QACvC,IAAVE,GAAyB2E,EAAGsI,KAAK,iBAAkBjN,QACnC,IAAhBoJ,GAA+BzE,EAAGsI,KAAK,wBAAyB7D,EAAe,MAAQ,WAC3E,IAAZc,GAA2BvF,EAAGsI,KAAK,oBAAqB/C,QAC5C,IAAZH,GAA2BpF,EAAGsI,KAAK,oBAAqBlD,QAC3C,IAAbI,GAA4BxF,EAAGsI,KAAK,qBAAsB9C,QAC7C,IAAbF,GAA4BtF,EAAGsI,KAAK,qBAAsBhD,QACpD,IAANrJ,GAAqB+D,EAAGsI,KAAK,aAAcrM,GACtDvB,KAAKsM,UAAUgE,OAAOhL,GACtBtF,KAAK8P,gBAAgBxK,GAAI,GACzBtF,KAAK0S,mBACL1S,KAAKkQ,yBACLlQ,KAAK2S,qBAAoB,GAElBrN,GAGX4G,EAAUhM,UAAU6U,WAAa,SAASzP,GAOtC,OANAA,EAAKhG,EAAEgG,GACPtF,KAAK8P,gBAAgBxK,GAAI,GACzBtF,KAAK0S,mBACL1S,KAAKkQ,yBACLlQ,KAAK2S,qBAAoB,GAElBrN,GAGX4G,EAAUhM,UAAU8U,UAAY,SAASxU,EAAGE,EAAGD,EAAOE,EAAQoJ,GAC1D,IAAI9I,EAAO,CAACT,EAAGA,EAAGE,EAAGA,EAAGD,MAAOA,EAAOE,OAAQA,EAAQoJ,aAAcA,GACpE,OAAO/J,KAAK+G,KAAKyE,+BAA+BvK,IAGpDiL,EAAUhM,UAAU+U,aAAe,SAAS3P,EAAI4F,GAC5CA,OAAmC,IAAfA,GAAoCA,EAExD,IAAIjK,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBAGd3P,IACDA,EAAOjB,KAAK+G,KAAK8B,mBAAmBvD,IAGxCtF,KAAK+G,KAAKkE,WAAWhK,EAAMiK,GAC3B5F,EAAGkN,WAAW,mBACdxS,KAAKkQ,yBACDhF,GACA5F,EAAGnD,SAEPnC,KAAK2S,qBAAoB,GACzB3S,KAAKqS,uBAGTnG,EAAUhM,UAAUgV,UAAY,SAAShK,GACrClL,KAAK+G,KAAKlG,MAAM6D,QAAQ,SAASzD,GAC7BjB,KAAKiV,aAAahU,EAAKqE,GAAI4F,IAC5BlL,MACHA,KAAK+G,KAAKlG,MAAQ,GAClBb,KAAKkQ,0BAGThE,EAAUhM,UAAUiV,QAAU,SAASC,GACnC9V,EAAED,QAAQgW,IAAI,SAAUrV,KAAKoQ,iBAC7BpQ,KAAKsV,eACoB,IAAdF,GAA8BA,EAIrCpV,KAAKsM,UAAUnK,UAHfnC,KAAKkV,WAAU,GACflV,KAAKsM,UAAUkG,WAAW,cAI9BpS,EAAM8B,iBAAiBlC,KAAK+S,WACxB/S,KAAK+G,OACL/G,KAAK+G,KAAO,OAIpBmF,EAAUhM,UAAUsH,UAAY,SAASlC,EAAIjC,GACzC,IAAIgJ,EAAOrM,KAgBX,OAfAsF,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIXA,EAAK+I,UAAa3G,EACdpC,EAAK+I,UAAaqC,EAAKgE,qBAAuBhE,EAAK5E,KAAKuH,qBACxD3C,EAAK8C,GAAG3H,UAAUlC,EAAI,WAEtB+G,EAAK8C,GAAG3H,UAAUlC,EAAI,aAGvBtF,MAGXkM,EAAUhM,UAAUqV,QAAU,SAASjQ,EAAIjC,GACvC,IAAIgJ,EAAOrM,KAkBX,OAjBAsF,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIXA,EAAKgJ,QAAW5G,EACZpC,EAAKgJ,QAAWoC,EAAKgE,qBAAuBhE,EAAK5E,KAAKuH,sBACtD3C,EAAK8C,GAAGzH,UAAUpC,EAAI,WACtBA,EAAGkL,YAAY,yBAEfnE,EAAK8C,GAAGzH,UAAUpC,EAAI,UACtBA,EAAG+J,SAAS,2BAGbrP,MAGXkM,EAAUhM,UAAUsV,WAAa,SAASC,EAAUC,GAChD1V,KAAKuV,QAAQvV,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,WAAY+I,GAC7DC,IACA1V,KAAKyH,KAAK8G,aAAekH,IAIjCvJ,EAAUhM,UAAUyV,aAAe,SAASF,EAAUC,GAClD1V,KAAKwH,UAAUxH,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,WAAY+I,GAC/DC,IACA1V,KAAKyH,KAAK+G,eAAiBiH,IAInCvJ,EAAUhM,UAAUoV,QAAU,WAC1BtV,KAAKuV,QAAQvV,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,YAAY,GACjE1M,KAAKwH,UAAUxH,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,YAAY,GACnE1M,KAAKsM,UAAUiE,QAAQ,YAG3BrE,EAAUhM,UAAU2U,OAAS,WACzB7U,KAAKuV,QAAQvV,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,YAAY,GACjE1M,KAAKwH,UAAUxH,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,YAAY,GACnE1M,KAAKsM,UAAUiE,QAAQ,WAG3BrE,EAAUhM,UAAUiJ,OAAS,SAAS7D,EAAIjC,GAYtC,OAXAiC,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIXA,EAAKkI,OAAU9F,IAAO,EACtBiC,EAAGsI,KAAK,iBAAkB3M,EAAKkI,OAAS,MAAQ,SAE7CnJ,MAGXkM,EAAUhM,UAAU0K,UAAY,SAAStF,EAAIjC,GAczC,OAbAiC,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIN2U,MAAMvS,KACPpC,EAAK2J,UAAavH,IAAO,EACzBiC,EAAGsI,KAAK,qBAAsBvK,OAG/BrD,MAGXkM,EAAUhM,UAAU4K,UAAY,SAASxF,EAAIjC,GAczC,OAbAiC,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIN2U,MAAMvS,KACPpC,EAAK6J,UAAazH,IAAO,EACzBiC,EAAGsI,KAAK,qBAAsBvK,OAG/BrD,MAGXkM,EAAUhM,UAAUwK,SAAW,SAASpF,EAAIjC,GAcxC,OAbAiC,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIN2U,MAAMvS,KACPpC,EAAKyJ,SAAYrH,IAAO,EACxBiC,EAAGsI,KAAK,oBAAqBvK,OAG9BrD,MAGXkM,EAAUhM,UAAU2K,SAAW,SAASvF,EAAIjC,GAcxC,OAbAiC,EAAKhG,EAAEgG,IACJuK,KAAK,SAAStN,EAAO+C,GAEpB,IAAIrE,GADJqE,EAAKhG,EAAEgG,IACOsL,KAAK,mBACf,MAAO3P,IAIN2U,MAAMvS,KACPpC,EAAK4J,SAAYxH,IAAO,EACxBiC,EAAGsI,KAAK,oBAAqBvK,OAG9BrD,MAGXkM,EAAUhM,UAAU2V,eAAiB,SAASvQ,EAAIL,GAE9C,IAAIhE,GADJqE,EAAKhG,EAAEgG,GAAIwQ,SACGlF,KAAK,mBACnB,GAAI,MAAO3P,EAAX,CAIA,IAAIoL,EAAOrM,KAEXqM,EAAKtF,KAAKuD,aACV+B,EAAKtF,KAAKiF,YAAY/K,GAEtBgE,EAASR,KAAKzE,KAAMsF,EAAIrE,GAExBoL,EAAK6D,yBACL7D,EAAKsG,sBAELtG,EAAKtF,KAAKkF,cAGdC,EAAUhM,UAAUuQ,OAAS,SAASnL,EAAI7E,EAAOE,GAC7CX,KAAK6V,eAAevQ,EAAI,SAASA,EAAIrE,GACjCR,EAAQ,MAACA,EAAiDA,EAAQQ,EAAKR,MACvEE,EAAS,MAACA,EAAmDA,EAASM,EAAKN,OAE3EX,KAAK+G,KAAKsC,SAASpI,EAAMA,EAAKT,EAAGS,EAAKP,EAAGD,EAAOE,MAIxDuL,EAAUhM,UAAU6V,KAAO,SAASzQ,EAAI9E,EAAGE,GACvCV,KAAK6V,eAAevQ,EAAI,SAASA,EAAIrE,GACjCT,EAAI,MAACA,EAAyCA,EAAIS,EAAKT,EACvDE,EAAI,MAACA,EAAyCA,EAAIO,EAAKP,EAEvDV,KAAK+G,KAAKsC,SAASpI,EAAMT,EAAGE,EAAGO,EAAKR,MAAOQ,EAAKN,WAIxDuL,EAAUhM,UAAU8V,OAAS,SAAS1Q,EAAI9E,EAAGE,EAAGD,EAAOE,GACnDX,KAAK6V,eAAevQ,EAAI,SAASA,EAAIrE,GACjCT,EAAI,MAACA,EAAyCA,EAAIS,EAAKT,EACvDE,EAAI,MAACA,EAAyCA,EAAIO,EAAKP,EACvDD,EAAQ,MAACA,EAAiDA,EAAQQ,EAAKR,MACvEE,EAAS,MAACA,EAAmDA,EAASM,EAAKN,OAE3EX,KAAK+G,KAAKsC,SAASpI,EAAMT,EAAGE,EAAGD,EAAOE,MAI9CuL,EAAUhM,UAAUgN,eAAiB,SAAS7J,EAAK4S,GAC/C,QAAkB,IAAP5S,EACP,OAAOrD,KAAKyH,KAAKyF,eAGrB,IAAIgJ,EAAa9V,EAAMgD,YAAYC,GAE/BrD,KAAKyH,KAAKqH,qBAAuBoH,EAAWxS,MAAQ1D,KAAKyH,KAAK9G,SAAWuV,EAAWvV,SAGxFX,KAAKyH,KAAKqH,mBAAqBoH,EAAWxS,KAC1C1D,KAAKyH,KAAKyF,eAAiBgJ,EAAWvV,OAEjCsV,GACDjW,KAAKyP,kBAIbvD,EAAUhM,UAAU8M,WAAa,SAAS3J,EAAK4S,GAC3C,QAAkB,IAAP5S,EAAoB,CAC3B,GAAIrD,KAAKyH,KAAKuF,WACV,OAAOhN,KAAKyH,KAAKuF,WAErB,IAAIoH,EAAIpU,KAAKsM,UAAUsD,SAAS,IAAM5P,KAAKyH,KAAKiF,WAAWoJ,QAC3D,OAAO5U,KAAK4Q,KAAKsC,EAAEpC,cAAgBoC,EAAExG,KAAK,mBAE9C,IAAIsI,EAAa9V,EAAMgD,YAAYC,GAE/BrD,KAAKyH,KAAKsH,iBAAmBmH,EAAWxS,MAAQ1D,KAAKyH,KAAKuF,aAAekJ,EAAWvV,SAGxFX,KAAKyH,KAAKsH,eAAiBmH,EAAWxS,KACtC1D,KAAKyH,KAAKuF,WAAakJ,EAAWvV,OAE7BsV,GACDjW,KAAKyP,kBAKbvD,EAAUhM,UAAUoP,UAAY,WAC5B,OAAOpO,KAAK4S,MAAM9T,KAAKsM,UAAUyF,aAAe/R,KAAKyH,KAAKhH,QAG9DyL,EAAUhM,UAAUkR,iBAAmB,SAAS7L,EAAU4Q,GACtD,IAAIC,OAAoC,IAAbD,GAA4BA,EACnDnW,KAAKsM,UAAUsF,SAAW5R,KAAKsM,UAAU/G,WACzC8Q,EAAe9Q,EAASrB,KAAOkS,EAAalS,KAC5CoS,EAAc/Q,EAASE,IAAM2Q,EAAa3Q,IAE1C8Q,EAAcrV,KAAK8J,MAAMhL,KAAKsM,UAAU7L,QAAUT,KAAKyH,KAAKhH,OAC5D+V,EAAYtV,KAAK8J,MAAMhL,KAAKsM,UAAU3L,SAAWmJ,SAAS9J,KAAKsM,UAAUsB,KAAK,4BAElF,MAAO,CAACpN,EAAGU,KAAK8J,MAAMqL,EAAeE,GAAc7V,EAAGQ,KAAK8J,MAAMsL,EAAcE,KAGnFtK,EAAUhM,UAAUuI,YAAc,WAC9BzI,KAAK+G,KAAK0B,eAGdyD,EAAUhM,UAAUwI,OAAS,WACzB1I,KAAK+G,KAAK2B,SACV1I,KAAKkQ,0BAGThE,EAAUhM,UAAUoJ,YAAc,SAAS9I,EAAGE,EAAGD,EAAOE,GACpD,OAAOX,KAAK+G,KAAKuC,YAAY9I,EAAGE,EAAGD,EAAOE,IAG9CuL,EAAUhM,UAAUuW,UAAY,SAASC,GACrC1W,KAAKyH,KAAK4F,YAA8B,IAAhBqJ,EACxB1W,KAAKwV,YAAYkB,GACjB1W,KAAK2V,cAAce,GACnB1W,KAAKuP,mBAGTrD,EAAUhM,UAAUqP,gBAAkB,WAClC,IAAIoH,EAAkB,qBAEO,IAAzB3W,KAAKyH,KAAK4F,WACVrN,KAAKsM,UAAU+C,SAASsH,GAExB3W,KAAKsM,UAAUkE,YAAYmG,IAInCzK,EAAUhM,UAAU0W,kBAAoB,SAASC,EAAUC,GACvD9W,KAAK+G,KAAKkC,aACVjJ,KAAK+G,KAAK0B,cAEV,IADA,IAAIxH,EAAO,GACFsI,EAAI,EAAGA,EAAIvJ,KAAK+G,KAAKlG,MAAM8M,OAAQpE,IACxCtI,EAAOjB,KAAK+G,KAAKlG,MAAM0I,GACvBvJ,KAAKgW,OAAO/U,EAAKqE,GAAIpE,KAAK4S,MAAM7S,EAAKT,EAAIsW,EAAWD,QAAWE,EAC3D7V,KAAK4S,MAAM7S,EAAKR,MAAQqW,EAAWD,QAAWE,GAEtD/W,KAAK+G,KAAK2B,UAGdwD,EAAUhM,UAAU8W,aAAe,SAASC,EAAUC,GAClDlX,KAAKsM,UAAUkE,YAAY,cAAgBxQ,KAAKyH,KAAKhH,QAC9B,IAAnByW,GACAlX,KAAK4W,kBAAkB5W,KAAKyH,KAAKhH,MAAOwW,GAE5CjX,KAAKyH,KAAKhH,MAAQwW,EAClBjX,KAAK+G,KAAKtG,MAAQwW,EAClBjX,KAAKsM,UAAU+C,SAAS,cAAgB4H,IAI5CjP,EAAgB9H,UAAUiX,aAAe3X,EAASwI,EAAgB9H,UAAUuI,aAC5ET,EAAgB9H,UAAUkX,gBAAkB5X,EAASwI,EAAgB9H,UAAU8I,eAC3E,kBAAmB,kBACvBhB,EAAgB9H,UAAUmX,cAAgB7X,EAASwI,EAAgB9H,UAAUoJ,YACzE,gBAAiB,eACrBtB,EAAgB9H,UAAUoX,YAAc9X,EAASwI,EAAgB9H,UAAU+I,WACvE,cAAe,cACnBjB,EAAgB9H,UAAUqX,YAAc/X,EAASwI,EAAgB9H,UAAUyI,WACvE,cAAe,cACnBX,EAAgB9H,UAAUsX,cAAgBhY,EAASwI,EAAgB9H,UAAU0J,aACzE,gBAAiB,gBACrB5B,EAAgB9H,UAAUuX,YAAcjY,EAASwI,EAAgB9H,UAAUoK,WACvE,cAAe,cACnBtC,EAAgB9H,UAAUwX,gBAAkBlY,EAASwI,EAAgB9H,UAAUmK,cAC3E,kBAAmB,iBACvBrC,EAAgB9H,UAAUyX,SAAWnY,EAASwI,EAAgB9H,UAAUsK,QACpE,WAAY,aAChBxC,EAAgB9H,UAAU0X,YAAcpY,EAASwI,EAAgB9H,UAAU+K,WACvE,cAAe,cACnBjD,EAAgB9H,UAAU2X,cAAgBrY,EAASwI,EAAgB9H,UAAUiL,YACzE,gBAAiB,eACrBnD,EAAgB9H,UAAU4X,UAAYtY,EAASwI,EAAgB9H,UAAUmJ,SACrE,YAAa,YACjBrB,EAAgB9H,UAAU6X,gBAAkBvY,EAASwI,EAAgB9H,UAAUqL,cAC3E,kBAAmB,iBACvBvD,EAAgB9H,UAAU8X,aAAexY,EAASwI,EAAgB9H,UAAU8L,YACxE,eAAgB,eACpBhE,EAAgB9H,UAAU+X,WAAazY,EAASwI,EAAgB9H,UAAU+L,UACtE,aAAc,aAClBjE,EAAgB9H,UAAUgY,qCACtB1Y,EAASwI,EAAgB9H,UAAUsL,+BACnC,uCAAwC,kCAC5CU,EAAUhM,UAAUiY,sBAAwB3Y,EAAS0M,EAAUhM,UAAUyS,oBACrE,wBAAyB,uBAC7BzG,EAAUhM,UAAUkY,aAAe5Y,EAAS0M,EAAUhM,UAAUsP,YAC5D,eAAgB,eACpBtD,EAAUhM,UAAUmY,eAAiB7Y,EAAS0M,EAAUhM,UAAUuP,cAC9D,iBAAkB,iBACtBvD,EAAUhM,UAAUoY,yBAA2B9Y,EAAS0M,EAAUhM,UAAUgQ,uBACxE,2BAA4B,0BAChChE,EAAUhM,UAAUqY,oBAAsB/Y,EAAS0M,EAAUhM,UAAUmQ,iBACnE,sBAAsB,oBAC1BnE,EAAUhM,UAAUsY,iBAAmBhZ,EAAS0M,EAAUhM,UAAU4P,gBAChE,mBAAoB,mBACxB5D,EAAUhM,UAAUuY,cAAgBjZ,EAAS0M,EAAUhM,UAAU6P,aAC7D,gBAAiB,gBACrB7D,EAAUhM,UAAUwY,WAAalZ,EAAS0M,EAAUhM,UAAU4U,UAC1D,aAAc,aAClB5I,EAAUhM,UAAUyY,YAAcnZ,EAAS0M,EAAUhM,UAAU6U,WAC3D,cAAe,cACnB7I,EAAUhM,UAAU0Y,YAAcpZ,EAAS0M,EAAUhM,UAAU8U,UAC3D,cAAe,aACnB9I,EAAUhM,UAAU2Y,cAAgBrZ,EAAS0M,EAAUhM,UAAU+U,aAC7D,gBAAiB,gBACrB/I,EAAUhM,UAAU4Y,WAAatZ,EAAS0M,EAAUhM,UAAUgV,UAC1D,aAAc,aAClBhJ,EAAUhM,UAAU6Y,WAAavZ,EAAS0M,EAAUhM,UAAU4K,UAC1D,aAAc,aAClBoB,EAAUhM,UAAUiN,UAAY3N,EAAS0M,EAAUhM,UAAU2K,SACzD,YAAa,YACjBqB,EAAUhM,UAAU8Y,gBAAkBxZ,EAAS0M,EAAUhM,UAAU2V,eAC/D,kBAAmB,kBACvB3J,EAAUhM,UAAU6M,YAAcvN,EAAS0M,EAAUhM,UAAU8M,WAC3D,cAAe,cACnBd,EAAUhM,UAAU+Y,WAAazZ,EAAS0M,EAAUhM,UAAUoP,UAC1D,aAAc,aAClBpD,EAAUhM,UAAUgZ,oBAAsB1Z,EAAS0M,EAAUhM,UAAUkR,iBACnE,sBAAuB,oBAC3BlF,EAAUhM,UAAUiX,aAAe3X,EAAS0M,EAAUhM,UAAUuI,YAC5D,eAAgB,eACpByD,EAAUhM,UAAUmX,cAAgB7X,EAAS0M,EAAUhM,UAAUoJ,YAC7D,gBAAiB,eACrB4C,EAAUhM,UAAUiZ,WAAa3Z,EAAS0M,EAAUhM,UAAUuW,UAC1D,aAAc,aAClBvK,EAAUhM,UAAUkZ,kBAAoB5Z,EAAS0M,EAAUhM,UAAUqP,gBACjE,oBAAqB,mBAGzBhQ,EAAM8Z,YAAcnN,EAEpB3M,EAAM8Z,YAAYjZ,MAAQA,EAC1Bb,EAAM8Z,YAAYC,OAAStR,EAC3BzI,EAAM8Z,YAAYvS,wBAA0BA,EAE5CxH,EAAEia,GAAGC,UAAY,SAAS/R,GACtB,OAAOzH,KAAK6P,KAAK,WACb,IAAIuE,EAAI9U,EAAEU,MACLoU,EAAExD,KAAK,cACRwD,EACKxD,KAAK,YAAa,IAAI1E,EAAUlM,KAAMyH,OAKhDlI,EAAM8Z,cCr2DjB,SAAUva,GACN,GAAsB,mBAAXC,QAAyBA,OAAOC,IACvCD,OAAO,CAAC,SAAU,YAAa,UAAW,iBAAkB,8BACxD,sBAAuB,iBAAkB,eAAgB,oBAAqB,mBAC9E,uBAAwB,mBAAoB,gCAAiC,sBAC7E,0BAA2B,qBAAsB,sBAAuB,oBACxE,mBAAoB,0BAA2B,8BAC/C,8BAA+B,+BAAgCD,QAChE,GAAuB,oBAAZG,QAAyB,CACvC,IAAMC,OAASC,QAAQ,UAAa,MAAOC,IAC3C,IAAMoa,UAAYra,QAAQ,aAAgB,MAAOC,IACjDN,EAAQI,OAAQsa,UAAUH,YAAapa,cAEvCH,EAAQI,OAAQma,YAAaha,QAbrC,CAeG,SAASC,EAAG+Z,EAAa9Z,GAKxB,SAASka,EAAgC1S,GACrCsS,EAAYvS,wBAAwBrC,KAAKzE,KAAM+G,GA+DnD,OA5DAsS,EAAYvS,wBAAwBO,eAAeoS,KAEnDA,EAAgCvZ,UAAYwZ,OAAOC,OAAON,EAAYvS,wBAAwB5G,YACpD0Z,YAAcH,GAExBvZ,UAAUsH,UAAY,SAASlC,EAAImC,GAE/D,GADAnC,EAAKhG,EAAEgG,GACM,YAATmC,GAA+B,WAATA,EACtBnC,EAAGkC,UAAUC,QACV,GAAa,WAATA,EAAmB,CAC1B,IAAIoS,EAAM5Z,UAAU,GAChB6Z,EAAQ7Z,UAAU,GACtBqF,EAAGkC,UAAUC,EAAMoS,EAAKC,OACrB,CACH,IAAI1L,EAAU9I,EAAGsL,KAAK,qBAAuBtL,EAAGsL,KAAK,qBACjD5Q,KAAK+G,KAAKU,KAAKD,UAAU4G,QAC7B9I,EAAGkC,UAAUlI,EAAEyF,OAAO,GAAI/E,KAAK+G,KAAKU,KAAKD,UAAW,CAChD4G,QAASA,GACV,CACCqG,MAAOhN,EAAKgN,OAAS,aACrBC,KAAMjN,EAAKiN,MAAQ,aACnBjE,OAAQhJ,EAAKgJ,QAAU,gBAG/B,OAAOzQ,MAGXyZ,EAAgCvZ,UAAUwH,UAAY,SAASpC,EAAImC,GAY/D,OAXAnC,EAAKhG,EAAEgG,GACM,YAATmC,GAA+B,WAATA,EACtBnC,EAAGoC,UAAUD,GAEbnC,EAAGoC,UAAUpI,EAAEyF,OAAO,GAAI/E,KAAK+G,KAAKU,KAAKC,UAAW,CAChDqS,YAAa/Z,KAAK+G,KAAKU,KAAK8F,SAAWvN,KAAK+G,KAAKuF,UAAU0N,SAAW,KACtEvF,MAAOhN,EAAKgN,OAAS,aACrBC,KAAMjN,EAAKiN,MAAQ,aACnBC,KAAMlN,EAAKkN,MAAQ,gBAGpB3U,MAGXyZ,EAAgCvZ,UAAUyH,UAAY,SAASrC,EAAImC,GAG/D,OAFAnC,EAAKhG,EAAEgG,IACJqC,UAAUF,GACNzH,MAGXyZ,EAAgCvZ,UAAU0H,YAAc,SAAStC,EAAImC,GAEjE,OADAnC,EAAKhG,EAAEgG,GACAzC,QAAQyC,EAAGsL,KAAK,eAG3B6I,EAAgCvZ,UAAU2H,GAAK,SAASvC,EAAIwC,EAAW7C,GAEnE,OADA3F,EAAEgG,GAAIuC,GAAGC,EAAW7C,GACbjF,MAGXT,EAAMka,gCAAkCA","file":"gridstack.all.js"} \ No newline at end of file From 1036221b02bc935c5411711f1800dd39187dff56 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Mar 2019 08:46:28 -0700 Subject: [PATCH 0015/1298] Update README.md --- doc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/README.md b/doc/README.md index d0bd95755..bf660d504 100644 --- a/doc/README.md +++ b/doc/README.md @@ -96,7 +96,7 @@ gridstack.js API ## Grid attributes - `data-gs-animate` - turns animation on -- `data-gs-width` - amount of columns. Setting non-default value must be supported by equivalent change in CSS, [see docs here](https://github.com/troolee/gridstack.js#change-grid-width). +- `data-gs-width` - amount of columns. Setting non-default value must be supported by equivalent change in CSS, [see docs here](https://github.com/gridstack/gridstack.js#change-grid-width). - `data-gs-height` - maximum rows amount. Default is `0` which means no maximum rows. - `data-gs-current-height` - current rows amount. Set by the library only. Can be used by the CSS rules. From d23cf0aa2938d66d1cb1976abf8a37520c403d39 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 08:37:50 -0700 Subject: [PATCH 0016/1298] removed /dist folder remaining files. generated on the fly (merge comflict) --- dist/gridstack-extra.css | 1295 ---------------------------------- dist/gridstack-extra.min.css | 1 - dist/gridstack.css | 387 ---------- dist/gridstack.min.css | 1 - 4 files changed, 1684 deletions(-) delete mode 100644 dist/gridstack-extra.css delete mode 100644 dist/gridstack-extra.min.css delete mode 100644 dist/gridstack.css delete mode 100644 dist/gridstack.min.css diff --git a/dist/gridstack-extra.css b/dist/gridstack-extra.css deleted file mode 100644 index 0f51e59b4..000000000 --- a/dist/gridstack-extra.css +++ /dev/null @@ -1,1295 +0,0 @@ -.grid-stack.grid-stack-1 > .grid-stack-item { - min-width: 100%; -} - -.grid-stack.grid-stack-1 > .grid-stack-item[data-gs-width='1'] { - width: 100%; -} - -.grid-stack.grid-stack-1 > .grid-stack-item[data-gs-x='1'] { - left: 100%; -} - -.grid-stack.grid-stack-1 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 100%; -} - -.grid-stack.grid-stack-1 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 100%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item { - min-width: 50%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-width='1'] { - width: 50%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-x='1'] { - left: 50%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 50%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 50%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-width='2'] { - width: 100%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-x='2'] { - left: 100%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 100%; -} - -.grid-stack.grid-stack-2 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 100%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item { - min-width: 33.3333333333%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-width='1'] { - width: 33.3333333333%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-x='1'] { - left: 33.3333333333%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 33.3333333333%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 33.3333333333%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-width='2'] { - width: 66.6666666667%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-x='2'] { - left: 66.6666666667%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 66.6666666667%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 66.6666666667%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-width='3'] { - width: 100%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-x='3'] { - left: 100%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 100%; -} - -.grid-stack.grid-stack-3 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 100%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item { - min-width: 25%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-width='1'] { - width: 25%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-x='1'] { - left: 25%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 25%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 25%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-width='2'] { - width: 50%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-x='2'] { - left: 50%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 50%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 50%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-width='3'] { - width: 75%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-x='3'] { - left: 75%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 75%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 75%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-width='4'] { - width: 100%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-x='4'] { - left: 100%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 100%; -} - -.grid-stack.grid-stack-4 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 100%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item { - min-width: 20%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-width='1'] { - width: 20%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-x='1'] { - left: 20%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 20%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 20%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-width='2'] { - width: 40%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-x='2'] { - left: 40%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 40%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 40%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-width='3'] { - width: 60%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-x='3'] { - left: 60%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 60%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 60%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-width='4'] { - width: 80%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-x='4'] { - left: 80%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 80%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 80%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-width='5'] { - width: 100%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-x='5'] { - left: 100%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 100%; -} - -.grid-stack.grid-stack-5 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 100%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item { - min-width: 16.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='1'] { - width: 16.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='1'] { - left: 16.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 16.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 16.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='2'] { - width: 33.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='2'] { - left: 33.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 33.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 33.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='3'] { - width: 50%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='3'] { - left: 50%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 50%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 50%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='4'] { - width: 66.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='4'] { - left: 66.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 66.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 66.6666666667%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='5'] { - width: 83.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='5'] { - left: 83.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 83.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 83.3333333333%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-width='6'] { - width: 100%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-x='6'] { - left: 100%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 100%; -} - -.grid-stack.grid-stack-6 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 100%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item { - min-width: 14.2857142857%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='1'] { - width: 14.2857142857%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='1'] { - left: 14.2857142857%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 14.2857142857%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 14.2857142857%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='2'] { - width: 28.5714285714%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='2'] { - left: 28.5714285714%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 28.5714285714%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 28.5714285714%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='3'] { - width: 42.8571428571%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='3'] { - left: 42.8571428571%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 42.8571428571%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 42.8571428571%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='4'] { - width: 57.1428571429%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='4'] { - left: 57.1428571429%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 57.1428571429%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 57.1428571429%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='5'] { - width: 71.4285714286%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='5'] { - left: 71.4285714286%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 71.4285714286%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 71.4285714286%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='6'] { - width: 85.7142857143%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='6'] { - left: 85.7142857143%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 85.7142857143%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 85.7142857143%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-width='7'] { - width: 100%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-x='7'] { - left: 100%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 100%; -} - -.grid-stack.grid-stack-7 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 100%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item { - min-width: 12.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='1'] { - width: 12.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='1'] { - left: 12.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 12.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 12.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='2'] { - width: 25%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='2'] { - left: 25%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 25%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 25%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='3'] { - width: 37.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='3'] { - left: 37.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 37.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 37.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='4'] { - width: 50%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='4'] { - left: 50%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 50%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 50%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='5'] { - width: 62.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='5'] { - left: 62.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 62.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 62.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='6'] { - width: 75%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='6'] { - left: 75%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 75%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 75%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='7'] { - width: 87.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='7'] { - left: 87.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 87.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 87.5%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-width='8'] { - width: 100%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-x='8'] { - left: 100%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-min-width='8'] { - min-width: 100%; -} - -.grid-stack.grid-stack-8 > .grid-stack-item[data-gs-max-width='8'] { - max-width: 100%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item { - min-width: 11.1111111111%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='1'] { - width: 11.1111111111%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='1'] { - left: 11.1111111111%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 11.1111111111%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 11.1111111111%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='2'] { - width: 22.2222222222%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='2'] { - left: 22.2222222222%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 22.2222222222%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 22.2222222222%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='3'] { - width: 33.3333333333%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='3'] { - left: 33.3333333333%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 33.3333333333%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 33.3333333333%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='4'] { - width: 44.4444444444%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='4'] { - left: 44.4444444444%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 44.4444444444%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 44.4444444444%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='5'] { - width: 55.5555555556%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='5'] { - left: 55.5555555556%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 55.5555555556%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 55.5555555556%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='6'] { - width: 66.6666666667%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='6'] { - left: 66.6666666667%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 66.6666666667%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 66.6666666667%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='7'] { - width: 77.7777777778%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='7'] { - left: 77.7777777778%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 77.7777777778%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 77.7777777778%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='8'] { - width: 88.8888888889%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='8'] { - left: 88.8888888889%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='8'] { - min-width: 88.8888888889%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='8'] { - max-width: 88.8888888889%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-width='9'] { - width: 100%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-x='9'] { - left: 100%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-min-width='9'] { - min-width: 100%; -} - -.grid-stack.grid-stack-9 > .grid-stack-item[data-gs-max-width='9'] { - max-width: 100%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item { - min-width: 10%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='1'] { - width: 10%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='1'] { - left: 10%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 10%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 10%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='2'] { - width: 20%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='2'] { - left: 20%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 20%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 20%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='3'] { - width: 30%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='3'] { - left: 30%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 30%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 30%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='4'] { - width: 40%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='4'] { - left: 40%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 40%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 40%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='5'] { - width: 50%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='5'] { - left: 50%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 50%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 50%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='6'] { - width: 60%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='6'] { - left: 60%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 60%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 60%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='7'] { - width: 70%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='7'] { - left: 70%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 70%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 70%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='8'] { - width: 80%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='8'] { - left: 80%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='8'] { - min-width: 80%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='8'] { - max-width: 80%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='9'] { - width: 90%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='9'] { - left: 90%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='9'] { - min-width: 90%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='9'] { - max-width: 90%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-width='10'] { - width: 100%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-x='10'] { - left: 100%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-min-width='10'] { - min-width: 100%; -} - -.grid-stack.grid-stack-10 > .grid-stack-item[data-gs-max-width='10'] { - max-width: 100%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item { - min-width: 9.0909090909%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='1'] { - width: 9.0909090909%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='1'] { - left: 9.0909090909%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 9.0909090909%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 9.0909090909%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='2'] { - width: 18.1818181818%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='2'] { - left: 18.1818181818%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 18.1818181818%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 18.1818181818%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='3'] { - width: 27.2727272727%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='3'] { - left: 27.2727272727%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 27.2727272727%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 27.2727272727%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='4'] { - width: 36.3636363636%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='4'] { - left: 36.3636363636%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 36.3636363636%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 36.3636363636%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='5'] { - width: 45.4545454545%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='5'] { - left: 45.4545454545%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 45.4545454545%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 45.4545454545%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='6'] { - width: 54.5454545455%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='6'] { - left: 54.5454545455%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 54.5454545455%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 54.5454545455%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='7'] { - width: 63.6363636364%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='7'] { - left: 63.6363636364%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 63.6363636364%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 63.6363636364%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='8'] { - width: 72.7272727273%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='8'] { - left: 72.7272727273%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='8'] { - min-width: 72.7272727273%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='8'] { - max-width: 72.7272727273%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='9'] { - width: 81.8181818182%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='9'] { - left: 81.8181818182%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='9'] { - min-width: 81.8181818182%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='9'] { - max-width: 81.8181818182%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='10'] { - width: 90.9090909091%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='10'] { - left: 90.9090909091%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='10'] { - min-width: 90.9090909091%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='10'] { - max-width: 90.9090909091%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-width='11'] { - width: 100%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-x='11'] { - left: 100%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-min-width='11'] { - min-width: 100%; -} - -.grid-stack.grid-stack-11 > .grid-stack-item[data-gs-max-width='11'] { - max-width: 100%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item { - min-width: 8.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='1'] { - width: 8.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='1'] { - left: 8.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='1'] { - min-width: 8.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='1'] { - max-width: 8.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='2'] { - width: 16.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='2'] { - left: 16.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='2'] { - min-width: 16.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='2'] { - max-width: 16.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='3'] { - width: 25%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='3'] { - left: 25%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='3'] { - min-width: 25%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='3'] { - max-width: 25%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='4'] { - width: 33.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='4'] { - left: 33.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='4'] { - min-width: 33.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='4'] { - max-width: 33.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='5'] { - width: 41.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='5'] { - left: 41.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='5'] { - min-width: 41.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='5'] { - max-width: 41.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='6'] { - width: 50%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='6'] { - left: 50%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='6'] { - min-width: 50%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='6'] { - max-width: 50%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='7'] { - width: 58.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='7'] { - left: 58.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='7'] { - min-width: 58.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='7'] { - max-width: 58.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='8'] { - width: 66.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='8'] { - left: 66.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='8'] { - min-width: 66.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='8'] { - max-width: 66.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='9'] { - width: 75%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='9'] { - left: 75%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='9'] { - min-width: 75%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='9'] { - max-width: 75%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='10'] { - width: 83.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='10'] { - left: 83.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='10'] { - min-width: 83.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='10'] { - max-width: 83.3333333333%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='11'] { - width: 91.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='11'] { - left: 91.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='11'] { - min-width: 91.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='11'] { - max-width: 91.6666666667%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-width='12'] { - width: 100%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-x='12'] { - left: 100%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-min-width='12'] { - min-width: 100%; -} - -.grid-stack.grid-stack-12 > .grid-stack-item[data-gs-max-width='12'] { - max-width: 100%; -} diff --git a/dist/gridstack-extra.min.css b/dist/gridstack-extra.min.css deleted file mode 100644 index 8a29cc21d..000000000 --- a/dist/gridstack-extra.min.css +++ /dev/null @@ -1 +0,0 @@ -.grid-stack.grid-stack-1>.grid-stack-item{min-width:100%}.grid-stack.grid-stack-1>.grid-stack-item[data-gs-width='1']{width:100%}.grid-stack.grid-stack-1>.grid-stack-item[data-gs-x='1']{left:100%}.grid-stack.grid-stack-1>.grid-stack-item[data-gs-min-width='1']{min-width:100%}.grid-stack.grid-stack-1>.grid-stack-item[data-gs-max-width='1']{max-width:100%}.grid-stack.grid-stack-2>.grid-stack-item{min-width:50%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-width='1']{width:50%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-x='1']{left:50%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-min-width='1']{min-width:50%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-max-width='1']{max-width:50%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-width='2']{width:100%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-x='2']{left:100%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-min-width='2']{min-width:100%}.grid-stack.grid-stack-2>.grid-stack-item[data-gs-max-width='2']{max-width:100%}.grid-stack.grid-stack-3>.grid-stack-item{min-width:33.3333333333%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-width='1']{width:33.3333333333%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-x='1']{left:33.3333333333%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-min-width='1']{min-width:33.3333333333%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-max-width='1']{max-width:33.3333333333%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-width='2']{width:66.6666666667%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-x='2']{left:66.6666666667%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-min-width='2']{min-width:66.6666666667%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-max-width='2']{max-width:66.6666666667%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-width='3']{width:100%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-x='3']{left:100%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-min-width='3']{min-width:100%}.grid-stack.grid-stack-3>.grid-stack-item[data-gs-max-width='3']{max-width:100%}.grid-stack.grid-stack-4>.grid-stack-item{min-width:25%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-width='1']{width:25%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-x='1']{left:25%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-min-width='1']{min-width:25%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-max-width='1']{max-width:25%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-width='2']{width:50%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-x='2']{left:50%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-min-width='2']{min-width:50%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-max-width='2']{max-width:50%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-width='3']{width:75%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-x='3']{left:75%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-min-width='3']{min-width:75%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-max-width='3']{max-width:75%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-width='4']{width:100%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-x='4']{left:100%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-min-width='4']{min-width:100%}.grid-stack.grid-stack-4>.grid-stack-item[data-gs-max-width='4']{max-width:100%}.grid-stack.grid-stack-5>.grid-stack-item{min-width:20%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-width='1']{width:20%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-x='1']{left:20%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-min-width='1']{min-width:20%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-max-width='1']{max-width:20%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-width='2']{width:40%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-x='2']{left:40%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-min-width='2']{min-width:40%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-max-width='2']{max-width:40%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-width='3']{width:60%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-x='3']{left:60%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-min-width='3']{min-width:60%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-max-width='3']{max-width:60%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-width='4']{width:80%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-x='4']{left:80%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-min-width='4']{min-width:80%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-max-width='4']{max-width:80%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-width='5']{width:100%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-x='5']{left:100%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-min-width='5']{min-width:100%}.grid-stack.grid-stack-5>.grid-stack-item[data-gs-max-width='5']{max-width:100%}.grid-stack.grid-stack-6>.grid-stack-item{min-width:16.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='1']{width:16.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='1']{left:16.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='1']{min-width:16.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='1']{max-width:16.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='2']{width:33.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='2']{left:33.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='2']{min-width:33.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='2']{max-width:33.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='3']{width:50%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='3']{left:50%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='3']{min-width:50%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='3']{max-width:50%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='4']{width:66.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='4']{left:66.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='4']{min-width:66.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='4']{max-width:66.6666666667%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='5']{width:83.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='5']{left:83.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='5']{min-width:83.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='5']{max-width:83.3333333333%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-width='6']{width:100%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-x='6']{left:100%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-min-width='6']{min-width:100%}.grid-stack.grid-stack-6>.grid-stack-item[data-gs-max-width='6']{max-width:100%}.grid-stack.grid-stack-7>.grid-stack-item{min-width:14.2857142857%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='1']{width:14.2857142857%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='1']{left:14.2857142857%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='1']{min-width:14.2857142857%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='1']{max-width:14.2857142857%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='2']{width:28.5714285714%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='2']{left:28.5714285714%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='2']{min-width:28.5714285714%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='2']{max-width:28.5714285714%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='3']{width:42.8571428571%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='3']{left:42.8571428571%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='3']{min-width:42.8571428571%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='3']{max-width:42.8571428571%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='4']{width:57.1428571429%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='4']{left:57.1428571429%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='4']{min-width:57.1428571429%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='4']{max-width:57.1428571429%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='5']{width:71.4285714286%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='5']{left:71.4285714286%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='5']{min-width:71.4285714286%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='5']{max-width:71.4285714286%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='6']{width:85.7142857143%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='6']{left:85.7142857143%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='6']{min-width:85.7142857143%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='6']{max-width:85.7142857143%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-width='7']{width:100%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-x='7']{left:100%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-min-width='7']{min-width:100%}.grid-stack.grid-stack-7>.grid-stack-item[data-gs-max-width='7']{max-width:100%}.grid-stack.grid-stack-8>.grid-stack-item{min-width:12.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='1']{width:12.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='1']{left:12.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='1']{min-width:12.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='1']{max-width:12.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='2']{width:25%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='2']{left:25%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='2']{min-width:25%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='2']{max-width:25%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='3']{width:37.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='3']{left:37.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='3']{min-width:37.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='3']{max-width:37.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='4']{width:50%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='4']{left:50%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='4']{min-width:50%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='4']{max-width:50%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='5']{width:62.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='5']{left:62.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='5']{min-width:62.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='5']{max-width:62.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='6']{width:75%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='6']{left:75%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='6']{min-width:75%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='6']{max-width:75%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='7']{width:87.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='7']{left:87.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='7']{min-width:87.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='7']{max-width:87.5%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-width='8']{width:100%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-x='8']{left:100%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-min-width='8']{min-width:100%}.grid-stack.grid-stack-8>.grid-stack-item[data-gs-max-width='8']{max-width:100%}.grid-stack.grid-stack-9>.grid-stack-item{min-width:11.1111111111%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='1']{width:11.1111111111%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='1']{left:11.1111111111%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='1']{min-width:11.1111111111%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='1']{max-width:11.1111111111%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='2']{width:22.2222222222%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='2']{left:22.2222222222%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='2']{min-width:22.2222222222%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='2']{max-width:22.2222222222%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='3']{width:33.3333333333%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='3']{left:33.3333333333%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='3']{min-width:33.3333333333%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='3']{max-width:33.3333333333%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='4']{width:44.4444444444%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='4']{left:44.4444444444%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='4']{min-width:44.4444444444%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='4']{max-width:44.4444444444%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='5']{width:55.5555555556%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='5']{left:55.5555555556%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='5']{min-width:55.5555555556%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='5']{max-width:55.5555555556%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='6']{width:66.6666666667%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='6']{left:66.6666666667%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='6']{min-width:66.6666666667%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='6']{max-width:66.6666666667%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='7']{width:77.7777777778%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='7']{left:77.7777777778%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='7']{min-width:77.7777777778%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='7']{max-width:77.7777777778%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='8']{width:88.8888888889%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='8']{left:88.8888888889%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='8']{min-width:88.8888888889%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='8']{max-width:88.8888888889%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-width='9']{width:100%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-x='9']{left:100%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-min-width='9']{min-width:100%}.grid-stack.grid-stack-9>.grid-stack-item[data-gs-max-width='9']{max-width:100%}.grid-stack.grid-stack-10>.grid-stack-item{min-width:10%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='1']{width:10%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='1']{left:10%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='1']{min-width:10%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='1']{max-width:10%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='2']{width:20%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='2']{left:20%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='2']{min-width:20%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='2']{max-width:20%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='3']{width:30%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='3']{left:30%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='3']{min-width:30%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='3']{max-width:30%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='4']{width:40%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='4']{left:40%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='4']{min-width:40%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='4']{max-width:40%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='5']{width:50%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='5']{left:50%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='5']{min-width:50%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='5']{max-width:50%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='6']{width:60%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='6']{left:60%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='6']{min-width:60%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='6']{max-width:60%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='7']{width:70%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='7']{left:70%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='7']{min-width:70%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='7']{max-width:70%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='8']{width:80%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='8']{left:80%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='8']{min-width:80%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='8']{max-width:80%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='9']{width:90%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='9']{left:90%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='9']{min-width:90%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='9']{max-width:90%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-width='10']{width:100%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-x='10']{left:100%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-min-width='10']{min-width:100%}.grid-stack.grid-stack-10>.grid-stack-item[data-gs-max-width='10']{max-width:100%}.grid-stack.grid-stack-11>.grid-stack-item{min-width:9.0909090909%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='1']{width:9.0909090909%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='1']{left:9.0909090909%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='1']{min-width:9.0909090909%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='1']{max-width:9.0909090909%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='2']{width:18.1818181818%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='2']{left:18.1818181818%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='2']{min-width:18.1818181818%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='2']{max-width:18.1818181818%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='3']{width:27.2727272727%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='3']{left:27.2727272727%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='3']{min-width:27.2727272727%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='3']{max-width:27.2727272727%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='4']{width:36.3636363636%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='4']{left:36.3636363636%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='4']{min-width:36.3636363636%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='4']{max-width:36.3636363636%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='5']{width:45.4545454545%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='5']{left:45.4545454545%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='5']{min-width:45.4545454545%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='5']{max-width:45.4545454545%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='6']{width:54.5454545455%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='6']{left:54.5454545455%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='6']{min-width:54.5454545455%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='6']{max-width:54.5454545455%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='7']{width:63.6363636364%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='7']{left:63.6363636364%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='7']{min-width:63.6363636364%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='7']{max-width:63.6363636364%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='8']{width:72.7272727273%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='8']{left:72.7272727273%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='8']{min-width:72.7272727273%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='8']{max-width:72.7272727273%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='9']{width:81.8181818182%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='9']{left:81.8181818182%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='9']{min-width:81.8181818182%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='9']{max-width:81.8181818182%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='10']{width:90.9090909091%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='10']{left:90.9090909091%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='10']{min-width:90.9090909091%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='10']{max-width:90.9090909091%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-width='11']{width:100%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-x='11']{left:100%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-min-width='11']{min-width:100%}.grid-stack.grid-stack-11>.grid-stack-item[data-gs-max-width='11']{max-width:100%}.grid-stack.grid-stack-12>.grid-stack-item{min-width:8.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='1']{width:8.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='1']{left:8.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='1']{min-width:8.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='1']{max-width:8.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='2']{width:16.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='2']{left:16.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='2']{min-width:16.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='2']{max-width:16.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='3']{width:25%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='3']{left:25%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='3']{min-width:25%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='3']{max-width:25%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='4']{width:33.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='4']{left:33.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='4']{min-width:33.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='4']{max-width:33.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='5']{width:41.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='5']{left:41.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='5']{min-width:41.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='5']{max-width:41.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='6']{width:50%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='6']{left:50%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='6']{min-width:50%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='6']{max-width:50%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='7']{width:58.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='7']{left:58.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='7']{min-width:58.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='7']{max-width:58.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='8']{width:66.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='8']{left:66.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='8']{min-width:66.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='8']{max-width:66.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='9']{width:75%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='9']{left:75%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='9']{min-width:75%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='9']{max-width:75%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='10']{width:83.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='10']{left:83.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='10']{min-width:83.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='10']{max-width:83.3333333333%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='11']{width:91.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='11']{left:91.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='11']{min-width:91.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='11']{max-width:91.6666666667%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-width='12']{width:100%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-x='12']{left:100%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-min-width='12']{min-width:100%}.grid-stack.grid-stack-12>.grid-stack-item[data-gs-max-width='12']{max-width:100%} \ No newline at end of file diff --git a/dist/gridstack.css b/dist/gridstack.css deleted file mode 100644 index 7f6b9a073..000000000 --- a/dist/gridstack.css +++ /dev/null @@ -1,387 +0,0 @@ -:root .grid-stack-item > .ui-resizable-handle { - filter: none; -} - -.grid-stack { - position: relative; -} - -.grid-stack.grid-stack-rtl { - direction: ltr; -} - -.grid-stack.grid-stack-rtl > .grid-stack-item { - direction: rtl; -} - -.grid-stack .grid-stack-placeholder > .placeholder-content { - border: 1px dashed lightgray; - margin: 0; - position: absolute; - top: 0; - left: 10px; - right: 10px; - bottom: 0; - width: auto; - z-index: 0 !important; - text-align: center; -} - -.grid-stack > .grid-stack-item { - min-width: 8.3333333333%; - position: absolute; - padding: 0; -} - -.grid-stack > .grid-stack-item > .grid-stack-item-content { - margin: 0; - position: absolute; - top: 0; - left: 10px; - right: 10px; - bottom: 0; - width: auto; - z-index: 0; - overflow-x: hidden; - overflow-y: auto; -} - -.grid-stack > .grid-stack-item > .ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; -} - -.grid-stack > .grid-stack-item.ui-resizable-disabled > .ui-resizable-handle, -.grid-stack > .grid-stack-item.ui-resizable-autohide > .ui-resizable-handle { - display: none; -} - -.grid-stack > .grid-stack-item.ui-draggable-dragging, .grid-stack > .grid-stack-item.ui-resizable-resizing { - z-index: 100; -} - -.grid-stack > .grid-stack-item.ui-draggable-dragging > .grid-stack-item-content, -.grid-stack > .grid-stack-item.ui-draggable-dragging > .grid-stack-item-content, .grid-stack > .grid-stack-item.ui-resizable-resizing > .grid-stack-item-content, -.grid-stack > .grid-stack-item.ui-resizable-resizing > .grid-stack-item-content { - box-shadow: 1px 4px 6px rgba(0, 0, 0, 0.2); - opacity: 0.8; -} - -.grid-stack > .grid-stack-item > .ui-resizable-se, -.grid-stack > .grid-stack-item > .ui-resizable-sw { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDUxMS42MjYgNTExLjYyNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjYyNiA1MTEuNjI3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTMyOC45MDYsNDAxLjk5NGgtMzYuNTUzVjEwOS42MzZoMzYuNTUzYzQuOTQ4LDAsOS4yMzYtMS44MDksMTIuODQ3LTUuNDI2YzMuNjEzLTMuNjE1LDUuNDIxLTcuODk4LDUuNDIxLTEyLjg0NSAgIGMwLTQuOTQ5LTEuODAxLTkuMjMxLTUuNDI4LTEyLjg1MWwtNzMuMDg3LTczLjA5QzI2NS4wNDQsMS44MDksMjYwLjc2LDAsMjU1LjgxMywwYy00Ljk0OCwwLTkuMjI5LDEuODA5LTEyLjg0Nyw1LjQyNCAgIGwtNzMuMDg4LDczLjA5Yy0zLjYxOCwzLjYxOS01LjQyNCw3LjkwMi01LjQyNCwxMi44NTFjMCw0Ljk0NiwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDVjMy42MTksMy42MTcsNy45MDEsNS40MjYsMTIuODUsNS40MjYgICBoMzYuNTQ1djI5Mi4zNThoLTM2LjU0MmMtNC45NTIsMC05LjIzNSwxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MjEtNS40MjQsNy45MDUtNS40MjQsMTIuODU0ICAgYzAsNC45NDUsMS44MDcsOS4yMjcsNS40MjQsMTIuODQ3bDczLjA4OSw3My4wODhjMy42MTcsMy42MTcsNy44OTgsNS40MjQsMTIuODQ3LDUuNDI0YzQuOTUsMCw5LjIzNC0xLjgwNywxMi44NDktNS40MjQgICBsNzMuMDg3LTczLjA4OGMzLjYxMy0zLjYyLDUuNDIxLTcuOTAxLDUuNDIxLTEyLjg0N2MwLTQuOTQ4LTEuODA4LTkuMjMyLTUuNDIxLTEyLjg1NCAgIEMzMzguMTQyLDQwMy44MDIsMzMzLjg1Nyw0MDEuOTk0LDMyOC45MDYsNDAxLjk5NHoiIGZpbGw9IiM2NjY2NjYiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K); - background-repeat: no-repeat; - background-position: center; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} - -.grid-stack > .grid-stack-item > .ui-resizable-se { - -webkit-transform: rotate(-45deg); - -moz-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - -o-transform: rotate(-45deg); - transform: rotate(-45deg); -} - -.grid-stack > .grid-stack-item > .ui-resizable-nw { - cursor: nw-resize; - width: 20px; - height: 20px; - left: 10px; - top: 0; -} - -.grid-stack > .grid-stack-item > .ui-resizable-n { - cursor: n-resize; - height: 10px; - top: 0; - left: 25px; - right: 25px; -} - -.grid-stack > .grid-stack-item > .ui-resizable-ne { - cursor: ne-resize; - width: 20px; - height: 20px; - right: 10px; - top: 0; -} - -.grid-stack > .grid-stack-item > .ui-resizable-e { - cursor: e-resize; - width: 10px; - right: 10px; - top: 15px; - bottom: 15px; -} - -.grid-stack > .grid-stack-item > .ui-resizable-se { - cursor: se-resize; - width: 20px; - height: 20px; - right: 10px; - bottom: 0; -} - -.grid-stack > .grid-stack-item > .ui-resizable-s { - cursor: s-resize; - height: 10px; - left: 25px; - bottom: 0; - right: 25px; -} - -.grid-stack > .grid-stack-item > .ui-resizable-sw { - cursor: sw-resize; - width: 20px; - height: 20px; - left: 10px; - bottom: 0; -} - -.grid-stack > .grid-stack-item > .ui-resizable-w { - cursor: w-resize; - width: 10px; - left: 10px; - top: 15px; - bottom: 15px; -} - -.grid-stack > .grid-stack-item.ui-draggable-dragging > .ui-resizable-handle { - display: none !important; -} - -.grid-stack > .grid-stack-item[data-gs-width='1'] { - width: 8.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-x='1'] { - left: 8.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='1'] { - min-width: 8.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='1'] { - max-width: 8.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-width='2'] { - width: 16.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-x='2'] { - left: 16.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='2'] { - min-width: 16.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='2'] { - max-width: 16.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-width='3'] { - width: 25%; -} - -.grid-stack > .grid-stack-item[data-gs-x='3'] { - left: 25%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='3'] { - min-width: 25%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='3'] { - max-width: 25%; -} - -.grid-stack > .grid-stack-item[data-gs-width='4'] { - width: 33.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-x='4'] { - left: 33.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='4'] { - min-width: 33.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='4'] { - max-width: 33.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-width='5'] { - width: 41.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-x='5'] { - left: 41.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='5'] { - min-width: 41.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='5'] { - max-width: 41.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-width='6'] { - width: 50%; -} - -.grid-stack > .grid-stack-item[data-gs-x='6'] { - left: 50%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='6'] { - min-width: 50%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='6'] { - max-width: 50%; -} - -.grid-stack > .grid-stack-item[data-gs-width='7'] { - width: 58.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-x='7'] { - left: 58.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='7'] { - min-width: 58.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='7'] { - max-width: 58.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-width='8'] { - width: 66.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-x='8'] { - left: 66.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='8'] { - min-width: 66.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='8'] { - max-width: 66.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-width='9'] { - width: 75%; -} - -.grid-stack > .grid-stack-item[data-gs-x='9'] { - left: 75%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='9'] { - min-width: 75%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='9'] { - max-width: 75%; -} - -.grid-stack > .grid-stack-item[data-gs-width='10'] { - width: 83.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-x='10'] { - left: 83.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='10'] { - min-width: 83.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='10'] { - max-width: 83.3333333333%; -} - -.grid-stack > .grid-stack-item[data-gs-width='11'] { - width: 91.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-x='11'] { - left: 91.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='11'] { - min-width: 91.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='11'] { - max-width: 91.6666666667%; -} - -.grid-stack > .grid-stack-item[data-gs-width='12'] { - width: 100%; -} - -.grid-stack > .grid-stack-item[data-gs-x='12'] { - left: 100%; -} - -.grid-stack > .grid-stack-item[data-gs-min-width='12'] { - min-width: 100%; -} - -.grid-stack > .grid-stack-item[data-gs-max-width='12'] { - max-width: 100%; -} - -.grid-stack.grid-stack-animate, -.grid-stack.grid-stack-animate .grid-stack-item { - -webkit-transition: left 0.3s, top 0.3s, height 0.3s, width 0.3s; - -moz-transition: left 0.3s, top 0.3s, height 0.3s, width 0.3s; - -ms-transition: left 0.3s, top 0.3s, height 0.3s, width 0.3s; - -o-transition: left 0.3s, top 0.3s, height 0.3s, width 0.3s; - transition: left 0.3s, top 0.3s, height 0.3s, width 0.3s; -} - -.grid-stack.grid-stack-animate .grid-stack-item.ui-draggable-dragging, -.grid-stack.grid-stack-animate .grid-stack-item.ui-resizable-resizing, -.grid-stack.grid-stack-animate .grid-stack-item.grid-stack-placeholder { - -webkit-transition: left 0s, top 0s, height 0s, width 0s; - -moz-transition: left 0s, top 0s, height 0s, width 0s; - -ms-transition: left 0s, top 0s, height 0s, width 0s; - -o-transition: left 0s, top 0s, height 0s, width 0s; - transition: left 0s, top 0s, height 0s, width 0s; -} - -.grid-stack.grid-stack-one-column-mode { - height: auto !important; -} - -.grid-stack.grid-stack-one-column-mode > .grid-stack-item { - position: relative !important; - width: auto !important; - left: 0 !important; - top: auto !important; - margin-bottom: 20px; - max-width: none !important; -} - -.grid-stack.grid-stack-one-column-mode > .grid-stack-item > .ui-resizable-handle { - display: none; -} diff --git a/dist/gridstack.min.css b/dist/gridstack.min.css deleted file mode 100644 index 349f34c6e..000000000 --- a/dist/gridstack.min.css +++ /dev/null @@ -1 +0,0 @@ -:root .grid-stack-item>.ui-resizable-handle{filter:none}.grid-stack{position:relative}.grid-stack.grid-stack-rtl{direction:ltr}.grid-stack.grid-stack-rtl>.grid-stack-item{direction:rtl}.grid-stack .grid-stack-placeholder>.placeholder-content{border:1px dashed #d3d3d3;margin:0;position:absolute;top:0;left:10px;right:10px;bottom:0;width:auto;z-index:0!important;text-align:center}.grid-stack>.grid-stack-item{min-width:8.3333333333%;position:absolute;padding:0}.grid-stack>.grid-stack-item>.grid-stack-item-content{margin:0;position:absolute;top:0;left:10px;right:10px;bottom:0;width:auto;z-index:0;overflow-x:hidden;overflow-y:auto}.grid-stack>.grid-stack-item>.ui-resizable-handle{position:absolute;font-size:.1px;display:block;-ms-touch-action:none;touch-action:none}.grid-stack>.grid-stack-item.ui-resizable-autohide>.ui-resizable-handle,.grid-stack>.grid-stack-item.ui-resizable-disabled>.ui-resizable-handle{display:none}.grid-stack>.grid-stack-item.ui-draggable-dragging,.grid-stack>.grid-stack-item.ui-resizable-resizing{z-index:100}.grid-stack>.grid-stack-item.ui-draggable-dragging>.grid-stack-item-content,.grid-stack>.grid-stack-item.ui-resizable-resizing>.grid-stack-item-content{box-shadow:1px 4px 6px rgba(0,0,0,.2);opacity:.8}.grid-stack>.grid-stack-item>.ui-resizable-se,.grid-stack>.grid-stack-item>.ui-resizable-sw{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDUxMS42MjYgNTExLjYyNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjYyNiA1MTEuNjI3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTMyOC45MDYsNDAxLjk5NGgtMzYuNTUzVjEwOS42MzZoMzYuNTUzYzQuOTQ4LDAsOS4yMzYtMS44MDksMTIuODQ3LTUuNDI2YzMuNjEzLTMuNjE1LDUuNDIxLTcuODk4LDUuNDIxLTEyLjg0NSAgIGMwLTQuOTQ5LTEuODAxLTkuMjMxLTUuNDI4LTEyLjg1MWwtNzMuMDg3LTczLjA5QzI2NS4wNDQsMS44MDksMjYwLjc2LDAsMjU1LjgxMywwYy00Ljk0OCwwLTkuMjI5LDEuODA5LTEyLjg0Nyw1LjQyNCAgIGwtNzMuMDg4LDczLjA5Yy0zLjYxOCwzLjYxOS01LjQyNCw3LjkwMi01LjQyNCwxMi44NTFjMCw0Ljk0NiwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDVjMy42MTksMy42MTcsNy45MDEsNS40MjYsMTIuODUsNS40MjYgICBoMzYuNTQ1djI5Mi4zNThoLTM2LjU0MmMtNC45NTIsMC05LjIzNSwxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MjEtNS40MjQsNy45MDUtNS40MjQsMTIuODU0ICAgYzAsNC45NDUsMS44MDcsOS4yMjcsNS40MjQsMTIuODQ3bDczLjA4OSw3My4wODhjMy42MTcsMy42MTcsNy44OTgsNS40MjQsMTIuODQ3LDUuNDI0YzQuOTUsMCw5LjIzNC0xLjgwNywxMi44NDktNS40MjQgICBsNzMuMDg3LTczLjA4OGMzLjYxMy0zLjYyLDUuNDIxLTcuOTAxLDUuNDIxLTEyLjg0N2MwLTQuOTQ4LTEuODA4LTkuMjMyLTUuNDIxLTEyLjg1NCAgIEMzMzguMTQyLDQwMy44MDIsMzMzLjg1Nyw0MDEuOTk0LDMyOC45MDYsNDAxLjk5NHoiIGZpbGw9IiM2NjY2NjYiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.grid-stack>.grid-stack-item>.ui-resizable-se{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.grid-stack>.grid-stack-item>.ui-resizable-nw{cursor:nw-resize;width:20px;height:20px;left:10px;top:0}.grid-stack>.grid-stack-item>.ui-resizable-n{cursor:n-resize;height:10px;top:0;left:25px;right:25px}.grid-stack>.grid-stack-item>.ui-resizable-ne{cursor:ne-resize;width:20px;height:20px;right:10px;top:0}.grid-stack>.grid-stack-item>.ui-resizable-e{cursor:e-resize;width:10px;right:10px;top:15px;bottom:15px}.grid-stack>.grid-stack-item>.ui-resizable-se{cursor:se-resize;width:20px;height:20px;right:10px;bottom:0}.grid-stack>.grid-stack-item>.ui-resizable-s{cursor:s-resize;height:10px;left:25px;bottom:0;right:25px}.grid-stack>.grid-stack-item>.ui-resizable-sw{cursor:sw-resize;width:20px;height:20px;left:10px;bottom:0}.grid-stack>.grid-stack-item>.ui-resizable-w{cursor:w-resize;width:10px;left:10px;top:15px;bottom:15px}.grid-stack>.grid-stack-item.ui-draggable-dragging>.ui-resizable-handle{display:none!important}.grid-stack>.grid-stack-item[data-gs-width='1']{width:8.3333333333%}.grid-stack>.grid-stack-item[data-gs-x='1']{left:8.3333333333%}.grid-stack>.grid-stack-item[data-gs-min-width='1']{min-width:8.3333333333%}.grid-stack>.grid-stack-item[data-gs-max-width='1']{max-width:8.3333333333%}.grid-stack>.grid-stack-item[data-gs-width='2']{width:16.6666666667%}.grid-stack>.grid-stack-item[data-gs-x='2']{left:16.6666666667%}.grid-stack>.grid-stack-item[data-gs-min-width='2']{min-width:16.6666666667%}.grid-stack>.grid-stack-item[data-gs-max-width='2']{max-width:16.6666666667%}.grid-stack>.grid-stack-item[data-gs-width='3']{width:25%}.grid-stack>.grid-stack-item[data-gs-x='3']{left:25%}.grid-stack>.grid-stack-item[data-gs-min-width='3']{min-width:25%}.grid-stack>.grid-stack-item[data-gs-max-width='3']{max-width:25%}.grid-stack>.grid-stack-item[data-gs-width='4']{width:33.3333333333%}.grid-stack>.grid-stack-item[data-gs-x='4']{left:33.3333333333%}.grid-stack>.grid-stack-item[data-gs-min-width='4']{min-width:33.3333333333%}.grid-stack>.grid-stack-item[data-gs-max-width='4']{max-width:33.3333333333%}.grid-stack>.grid-stack-item[data-gs-width='5']{width:41.6666666667%}.grid-stack>.grid-stack-item[data-gs-x='5']{left:41.6666666667%}.grid-stack>.grid-stack-item[data-gs-min-width='5']{min-width:41.6666666667%}.grid-stack>.grid-stack-item[data-gs-max-width='5']{max-width:41.6666666667%}.grid-stack>.grid-stack-item[data-gs-width='6']{width:50%}.grid-stack>.grid-stack-item[data-gs-x='6']{left:50%}.grid-stack>.grid-stack-item[data-gs-min-width='6']{min-width:50%}.grid-stack>.grid-stack-item[data-gs-max-width='6']{max-width:50%}.grid-stack>.grid-stack-item[data-gs-width='7']{width:58.3333333333%}.grid-stack>.grid-stack-item[data-gs-x='7']{left:58.3333333333%}.grid-stack>.grid-stack-item[data-gs-min-width='7']{min-width:58.3333333333%}.grid-stack>.grid-stack-item[data-gs-max-width='7']{max-width:58.3333333333%}.grid-stack>.grid-stack-item[data-gs-width='8']{width:66.6666666667%}.grid-stack>.grid-stack-item[data-gs-x='8']{left:66.6666666667%}.grid-stack>.grid-stack-item[data-gs-min-width='8']{min-width:66.6666666667%}.grid-stack>.grid-stack-item[data-gs-max-width='8']{max-width:66.6666666667%}.grid-stack>.grid-stack-item[data-gs-width='9']{width:75%}.grid-stack>.grid-stack-item[data-gs-x='9']{left:75%}.grid-stack>.grid-stack-item[data-gs-min-width='9']{min-width:75%}.grid-stack>.grid-stack-item[data-gs-max-width='9']{max-width:75%}.grid-stack>.grid-stack-item[data-gs-width='10']{width:83.3333333333%}.grid-stack>.grid-stack-item[data-gs-x='10']{left:83.3333333333%}.grid-stack>.grid-stack-item[data-gs-min-width='10']{min-width:83.3333333333%}.grid-stack>.grid-stack-item[data-gs-max-width='10']{max-width:83.3333333333%}.grid-stack>.grid-stack-item[data-gs-width='11']{width:91.6666666667%}.grid-stack>.grid-stack-item[data-gs-x='11']{left:91.6666666667%}.grid-stack>.grid-stack-item[data-gs-min-width='11']{min-width:91.6666666667%}.grid-stack>.grid-stack-item[data-gs-max-width='11']{max-width:91.6666666667%}.grid-stack>.grid-stack-item[data-gs-width='12']{width:100%}.grid-stack>.grid-stack-item[data-gs-x='12']{left:100%}.grid-stack>.grid-stack-item[data-gs-min-width='12']{min-width:100%}.grid-stack>.grid-stack-item[data-gs-max-width='12']{max-width:100%}.grid-stack.grid-stack-animate,.grid-stack.grid-stack-animate .grid-stack-item{-webkit-transition:left .3s,top .3s,height .3s,width .3s;-moz-transition:left .3s,top .3s,height .3s,width .3s;-ms-transition:left .3s,top .3s,height .3s,width .3s;-o-transition:left .3s,top .3s,height .3s,width .3s;transition:left .3s,top .3s,height .3s,width .3s}.grid-stack.grid-stack-animate .grid-stack-item.grid-stack-placeholder,.grid-stack.grid-stack-animate .grid-stack-item.ui-draggable-dragging,.grid-stack.grid-stack-animate .grid-stack-item.ui-resizable-resizing{-webkit-transition:left 0s,top 0s,height 0s,width 0s;-moz-transition:left 0s,top 0s,height 0s,width 0s;-ms-transition:left 0s,top 0s,height 0s,width 0s;-o-transition:left 0s,top 0s,height 0s,width 0s;transition:left 0s,top 0s,height 0s,width 0s}.grid-stack.grid-stack-one-column-mode{height:auto!important}.grid-stack.grid-stack-one-column-mode>.grid-stack-item{position:relative!important;width:auto!important;left:0!important;top:auto!important;margin-bottom:20px;max-width:none!important}.grid-stack.grid-stack-one-column-mode>.grid-stack-item>.ui-resizable-handle{display:none} \ No newline at end of file From 0551cb5929663fe359c3188f5a9c61fb670203e6 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 08:37:50 -0700 Subject: [PATCH 0017/1298] removed /dist folder remaining files. generated on the fly (merge comflict) --- .gitignore | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 95ec03ef6..a3e22fcb8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +dist node_modules bower_components coverage diff --git a/package.json b/package.json index 96368511f..a18f1741a 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "git+https://github.com/gridstack/gridstack.js.git" }, "scripts": { - "build": "grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "build": "mkdir dist && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "test": "grunt lint && karma start karma.conf.js", "lint": "grunt lint", "reset": "rm -rf dist node_modules", From 8f7c74d1936af944f92c76ae5426c0f27cca37e2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 09:11:24 -0700 Subject: [PATCH 0018/1298] readme typo fixes * also fixed mkdir /dist which gives error if already there. Build creates it anyway. --- doc/CHANGES.md | 53 ++++++++++++++++++++++++------------------------ package.json | 2 +- src/gridstack.js | 4 ++-- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 4f7e0ecb4..ab97e5fa5 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v0.1.0 (development)](#v010-development) +- [v1.0.0 (development)](#v100-development) - [v0.4.0](#v040) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) - [v0.2.6 (2016-08-17)](#v026-2016-08-17) @@ -19,25 +19,26 @@ Change log -## v0.1.0 (development) +## v1.0.0 (development) -- emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/troolee/gridstack.js/issues/823)). -- don't throw error if no bounding scroll element is found ([#891](https://github.com/troolee/gridstack.js/issues/891)). -- don't push locked widgets even if they are at the top of the grid ([#882](https://github.com/troolee/gridstack.js/issues/882)). +- emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/gridstack/gridstack.js/issues/823)). +- don't throw error if no bounding scroll element is found ([#891](https://github.com/gridstack/gridstack.js/issues/891)). +- don't push locked widgets even if they are at the top of the grid ([#882](https://github.com/gridstack/gridstack.js/issues/882)). +- removed lodash dependencies ([#693](https://github.com/gridstack/gridstack.js/issues/693)). ## v0.4.0 -- widgets can have their own resize handles. Use `data-gs-resize-handles` element attribute to use. For example, `data-gs-resize-handles="e,w"` will make the particular widget only resize west and east. ([#494](https://github.com/troolee/gridstack.js/issues/494)). -- enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/troolee/gridstack.js/issues/661), ([#396](https://github.com/troolee/gridstack.js/issues/396), ([#499](https://github.com/troolee/gridstack.js/issues/499)). -- fix `staticGrid` grid option ([#743](https://github.com/troolee/gridstack.js/issues/743)) +- widgets can have their own resize handles. Use `data-gs-resize-handles` element attribute to use. For example, `data-gs-resize-handles="e,w"` will make the particular widget only resize west and east. ([#494](https://github.com/gridstack/gridstack.js/issues/494)). +- enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/gridstack/gridstack.js/issues/661), ([#396](https://github.com/gridstack/gridstack.js/issues/396), ([#499](https://github.com/gridstack/gridstack.js/issues/499)). +- fix `staticGrid` grid option ([#743](https://github.com/gridstack/gridstack.js/issues/743)) - preserve inline styles when moving/cloning items (thanks [@silverwind](https://github.com/silverwind)) -- fix bug causing heights not to get set ([#744](https://github.com/troolee/gridstack.js/issues/744)) -- allow grid to have min-height, fixes ([#628](https://github.com/troolee/gridstack.js/issues/628)) (thanks [@adumesny](https://github.com/adumesny)) +- fix bug causing heights not to get set ([#744](https://github.com/gridstack/gridstack.js/issues/744)) +- allow grid to have min-height, fixes ([#628](https://github.com/gridstack/gridstack.js/issues/628)) (thanks [@adumesny](https://github.com/adumesny)) - widget x and y are now ints (thanks [@DonnchaC](https://github.com/donnchac)) - allow all droppable options (thanks [@vigor-vlad](https://github.com/vigor-vlad)) - properly track mouse position in `getCellFromPixel` (thanks [@aletorrado](https://github.com/aletorrado)) - remove instance of `!important` (thanks [@krilllind](https://github.com/krilllind)) -- scroll when moving widget up or down out of viewport ([#827](https://github.com/troolee/gridstack.js/issues/827)) +- scroll when moving widget up or down out of viewport ([#827](https://github.com/gridstack/gridstack.js/issues/827)) ## v0.3.0 (2017-04-21) @@ -45,23 +46,23 @@ Change log - prevent extra checks for removing widget when dragging off grid. - trigger `added` when a widget is added via dropping from one grid to another. - trigger `removed` when a widget is removed via dropping from one grid to another. -- trigger `removed` when a widget is removed via dropping on a removable zone ([#607](https://github.com/troolee/gridstack.js/issues/607) and [#550])(https://github.com/troolee/gridstack.js/issues/550)). -- trigger custom event for `resizestop` called `gsresizestop` ([#577](https://github.com/troolee/gridstack.js/issues/577) and [#398](https://github.com/troolee/gridstack.js/issues/398)). -- prevent dragging/resizing in `oneColumnMode` ([#593](https://github.com/troolee/gridstack.js/issues/593)). +- trigger `removed` when a widget is removed via dropping on a removable zone ([#607](https://github.com/gridstack/gridstack.js/issues/607) and [#550])(https://github.com/gridstack/gridstack.js/issues/550)). +- trigger custom event for `resizestop` called `gsresizestop` ([#577](https://github.com/gridstack/gridstack.js/issues/577) and [#398](https://github.com/gridstack/gridstack.js/issues/398)). +- prevent dragging/resizing in `oneColumnMode` ([#593](https://github.com/gridstack/gridstack.js/issues/593)). - add `oneColumnModeClass` option to grid. - remove 768px CSS styles, moved to grid-stack-one-column-mode class. -- add max-width override on grid-stck-one-column-mode ([#462](https://github.com/troolee/gridstack.js/issues/462)). +- add max-width override on grid-stck-one-column-mode ([#462](https://github.com/gridstack/gridstack.js/issues/462)). - add internal function`isNodeChangedPosition`, minor optimization to move/drag. - drag'n'drop plugin system. Move jQuery UI dependencies to separate plugin file. ## v0.2.6 (2016-08-17) - update requirements to the latest versions of jQuery (v3.1.0+) and jquery-ui (v1.12.0+). -- fix jQuery `size()` ([#486](https://github.com/troolee/gridstack.js/issues/486)). -- update `destroy([detachGrid])` call ([#422](https://github.com/troolee/gridstack.js/issues/422)). -- don't mutate options when calling `draggable` and `resizable`. ([#505](https://github.com/troolee/gridstack.js/issues/505)). -- update _notify to allow detach ([#411](https://github.com/troolee/gridstack.js/issues/411)). -- fix code that checks for jquery-ui ([#481](https://github.com/troolee/gridstack.js/issues/481)). +- fix jQuery `size()` ([#486](https://github.com/gridstack/gridstack.js/issues/486)). +- update `destroy([detachGrid])` call ([#422](https://github.com/gridstack/gridstack.js/issues/422)). +- don't mutate options when calling `draggable` and `resizable`. ([#505](https://github.com/gridstack/gridstack.js/issues/505)). +- update _notify to allow detach ([#411](https://github.com/gridstack/gridstack.js/issues/411)). +- fix code that checks for jquery-ui ([#481](https://github.com/gridstack/gridstack.js/issues/481)). - fix `cellWidth` calculation on empty grid ## v0.2.5 (2016-03-02) @@ -78,12 +79,12 @@ Change log - `'auto'` value for `cellHeight` option - fix `setStatic` method - add `setAnimation` method to API -- add `setGridWidth` method ([#227](https://github.com/troolee/gridstack.js/issues/227)) +- add `setGridWidth` method ([#227](https://github.com/gridstack/gridstack.js/issues/227)) - add `removable`/`removeTimeout` *(experimental)* -- add `detachGrid` parameter to `destroy` method ([#216](https://github.com/troolee/gridstack.js/issues/216)) (thanks @jhpedemonte) -- add `useOffset` parameter to `getCellFromPixel` method ([#237](https://github.com/troolee/gridstack.js/issues/237)) -- add `minWidth`, `maxWidth`, `minHeight`, `maxHeight`, `id` parameters to `addWidget` ([#188](https://github.com/troolee/gridstack.js/issues/188)) -- add `added` and `removed` events for when a widget is added or removed, respectively. ([#54](https://github.com/troolee/gridstack.js/issues/54)) +- add `detachGrid` parameter to `destroy` method ([#216](https://github.com/gridstack/gridstack.js/issues/216)) (thanks @jhpedemonte) +- add `useOffset` parameter to `getCellFromPixel` method ([#237](https://github.com/gridstack/gridstack.js/issues/237)) +- add `minWidth`, `maxWidth`, `minHeight`, `maxHeight`, `id` parameters to `addWidget` ([#188](https://github.com/gridstack/gridstack.js/issues/188)) +- add `added` and `removed` events for when a widget is added or removed, respectively. ([#54](https://github.com/gridstack/gridstack.js/issues/54)) - add `acceptWidgets` parameter. Widgets can now be draggable between grids or from outside *(experimental)* ## v0.2.4 (2016-02-15) @@ -146,4 +147,4 @@ Change log ## v0.1.0 (2014-11-18) -Very first version. \ No newline at end of file +Very first version. diff --git a/package.json b/package.json index a18f1741a..96368511f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "url": "git+https://github.com/gridstack/gridstack.js.git" }, "scripts": { - "build": "mkdir dist && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "build": "grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "test": "grunt lint && karma start karma.conf.js", "lint": "grunt lint", "reset": "rm -rf dist node_modules", diff --git a/src/gridstack.js b/src/gridstack.js index 195c4a19f..3f406f3b0 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -305,7 +305,7 @@ } }; - // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 + // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); }; @@ -1457,7 +1457,7 @@ el = $(el); var node = el.data('_gridstack_node'); - // For Meteor support: https://github.com/troolee/gridstack.js/pull/272 + // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 if (!node) { node = this.grid.getNodeDataByDOMEl(el); } From 803c182111710bd2d4b5a16b858fcb39cfe8e56d Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 28 Mar 2019 09:25:41 -0700 Subject: [PATCH 0019/1298] Update CHANGES.md --- doc/CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index ab97e5fa5..b68c4b395 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -6,7 +6,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [v1.0.0 (development)](#v100-development) -- [v0.4.0](#v040) +- [v0.4.0 (2008-05-11)](#v040-2008-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) - [v0.2.6 (2016-08-17)](#v026-2016-08-17) - [v0.2.5 (2016-03-02)](#v025-2016-03-02) @@ -26,7 +26,7 @@ Change log - don't push locked widgets even if they are at the top of the grid ([#882](https://github.com/gridstack/gridstack.js/issues/882)). - removed lodash dependencies ([#693](https://github.com/gridstack/gridstack.js/issues/693)). -## v0.4.0 +## v0.4.0 (2008-05-11) - widgets can have their own resize handles. Use `data-gs-resize-handles` element attribute to use. For example, `data-gs-resize-handles="e,w"` will make the particular widget only resize west and east. ([#494](https://github.com/gridstack/gridstack.js/issues/494)). - enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/gridstack/gridstack.js/issues/661), ([#396](https://github.com/gridstack/gridstack.js/issues/396), ([#499](https://github.com/gridstack/gridstack.js/issues/499)). From 6fe7dc98b6e886ce9f7c6022a63856143387f583 Mon Sep 17 00:00:00 2001 From: Garvan Kuskey Date: Thu, 28 Mar 2019 09:44:48 -0700 Subject: [PATCH 0020/1298] don't overwrite globals in modular environment --- src/gridstack.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gridstack.js b/src/gridstack.js index 195c4a19f..db54b8098 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -9,10 +9,13 @@ if (typeof define === 'function' && define.amd) { define(['jquery', 'exports'], factory); } else if (typeof exports !== 'undefined') { - try { jQuery = require('jquery'); } catch (e) {} - factory(jQuery, exports); + var jQueryModule; + + try { jQueryModule = require('jquery'); } catch (e) {} + + factory(jQueryModule || window.jQuery, exports); } else { - factory(jQuery, window); + factory(window.jQuery, window); } })(function($, scope) { var obsolete = function(f, oldName, newName) { From 134244679a98ecf1914c300ec5ace3c62d7ca8a2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 28 Mar 2019 10:07:31 -0700 Subject: [PATCH 0021/1298] Update CHANGES.md fixed year 2008 typo --- doc/CHANGES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index b68c4b395..bebbe2970 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -6,7 +6,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [v1.0.0 (development)](#v100-development) -- [v0.4.0 (2008-05-11)](#v040-2008-05-11) +- [v0.4.0 (2018-05-11)](#v040-2018-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) - [v0.2.6 (2016-08-17)](#v026-2016-08-17) - [v0.2.5 (2016-03-02)](#v025-2016-03-02) @@ -26,7 +26,7 @@ Change log - don't push locked widgets even if they are at the top of the grid ([#882](https://github.com/gridstack/gridstack.js/issues/882)). - removed lodash dependencies ([#693](https://github.com/gridstack/gridstack.js/issues/693)). -## v0.4.0 (2008-05-11) +## v0.4.0 (2018-05-11) - widgets can have their own resize handles. Use `data-gs-resize-handles` element attribute to use. For example, `data-gs-resize-handles="e,w"` will make the particular widget only resize west and east. ([#494](https://github.com/gridstack/gridstack.js/issues/494)). - enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/gridstack/gridstack.js/issues/661), ([#396](https://github.com/gridstack/gridstack.js/issues/396), ([#499](https://github.com/gridstack/gridstack.js/issues/499)). From 126db86f8c0cfcb22ea4ac6e187ac9319aceed55 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 13:41:57 -0700 Subject: [PATCH 0022/1298] converted to yarn which is SO much faster than npm * also updated to latest tools, which fixed build issues. Note: "grunt-sass": "2.1.0" IS REQUIRED as 3.0.0/3.0.1 gives errors I wasn't able to fix (see https://github.com/sourcey/spectacle/issues/156) --- .travis.yml | 16 +- package-lock.json | 8345 --------------------------------------------- package.json | 30 +- yarn.lock | 5413 +++++++++++++++++++++++++++++ 4 files changed, 5436 insertions(+), 8368 deletions(-) delete mode 100644 package-lock.json create mode 100644 yarn.lock diff --git a/.travis.yml b/.travis.yml index a9929fee8..c660c5a76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,16 +6,16 @@ sudo: required addons: chrome: stable #before_install: -#- npm install -g protractor@3.3.0 +#- yarn global add protractor@3.3.0 cache: directories: - node_modules install: -#- npm install -g npm@6.0.1 -- npm install -g grunt-cli -- npm install -g bower -#- npm install selenium-webdriver -- npm install +#- yarn global add npm@6.0.1 +- yarn global add grunt-cli +- yarn global add bower +#- yarn add selenium-webdriver +- yarn - bower install #- ./node_modules/protractor/bin/webdriver-manager update --standalone #before_script: @@ -23,8 +23,8 @@ install: #- export DISPLAY=:99.0 #- sh -e /etc/init.d/xvfb start script: -- npm run build -- npm test +- yarn build +- yarn test # - grunt e2e-test notifications: slack: diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 52f730dfa..000000000 --- a/package-lock.json +++ /dev/null @@ -1,8345 +0,0 @@ -{ - "name": "gridstack", - "version": "1.0.0-dev", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "6.0.111", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.111.tgz", - "integrity": "sha512-DoWK5a544Jcr6C1qBadalyj3gQT5V9B87qFBb+uOOq1Id309Lbe10zwsCGCURZEOBoS/pOsmbDN4FnD4sOwJaw==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "@types/selenium-webdriver": { - "version": "2.53.43", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz", - "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", - "dev": true - }, - "JSV": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", - "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", - "dev": true - }, - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true, - "requires": { - "mime-types": "~2.1.16", - "negotiator": "0.6.1" - } - }, - "addressparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", - "dev": true, - "optional": true - }, - "adm-zip": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "amqplib": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", - "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", - "dev": true, - "optional": true, - "requires": { - "bitsyntax": "~0.0.4", - "bluebird": "^3.4.6", - "buffer-more-ints": "0.0.2", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "anchor-markdown-header": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", - "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", - "dev": true, - "requires": { - "emoji-regex": "~6.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "ast-types": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.4.tgz", - "integrity": "sha512-RbY3UMcOcGhc3pOfQ6sliVjt3lqGib9lRjfH1UXJ8YfBFWbcWSJ8jr/VB2W6ulCzTSO/DSnCASqsHYuqa8O7yw==", - "dev": true, - "optional": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "axios": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", - "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", - "dev": true, - "optional": true, - "requires": { - "follow-redirects": "1.0.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.2.0" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "bail": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", - "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true - }, - "bitsyntax": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", - "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", - "dev": true, - "optional": true, - "requires": { - "buffer-more-ints": "0.0.2" - } - }, - "bl": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", - "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "~2.0.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", - "dev": true - }, - "body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", - "dev": true, - "requires": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "boundary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", - "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "~0.2.0" - } - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-more-ints": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", - "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", - "dev": true - }, - "buildmail": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", - "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", - "dev": true, - "optional": true, - "requires": { - "addressparser": "1.0.1", - "libbase64": "0.1.0", - "libmime": "3.0.0", - "libqp": "1.1.0", - "nodemailer-fetch": "1.6.0", - "nodemailer-shared": "1.1.0", - "punycode": "1.4.1" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true - }, - "ccount": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.3.tgz", - "integrity": "sha512-Jt9tIBkRc9POUof7QA/VwWd+58fKkEEfI+/t1/eOlxKM7ZhrczNzMFefge7Ai+39y1pR/pP6cI19guHy3FSLmw==", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "character-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", - "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.2.tgz", - "integrity": "sha512-sIrXwyna2+5b0eB9W149izTPJk/KkJTg6mEzDGibwBUkyH1SbDa+nf515Ppdi3MaH35lW0JFJDWeq9Luzes1Iw==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", - "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", - "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", - "dev": true - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "circular-json": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.4.tgz", - "integrity": "sha512-vnJA8KS0BfOihugYEUkLRcnmq21FbuivbxgzDLXNs3zIk4KllV4Mx4UuTzBXht9F00C7QfD1YqMXg1zP6EXpig==", - "dev": true - }, - "clean-css": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.8.tgz", - "integrity": "sha1-BhRVsklKdQrJj0bY1euxfGeeqdE=", - "dev": true, - "requires": { - "source-map": "0.5.x" - } - }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - } - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", - "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "comment-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.3.2.tgz", - "integrity": "sha1-PAPwd2uGo239mgosl8YwfzMggv4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.4" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "components-jqueryui": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/components-jqueryui/-/components-jqueryui-1.12.1.tgz", - "integrity": "sha1-YXB28SjzvkwmXz4ttQRx75bNnO4=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - } - } - }, - "connect-livereload": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.5.4.tgz", - "integrity": "sha1-gBV9E3HJ83zBQDmrGJWXDRGdw7w=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "coveralls": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.1.tgz", - "integrity": "sha512-FAzXwiDOYLGDWH+zgoIA+8GbWv50hlx+kpEJyvzLKOdnIBv9uWoVl4DhqGgyUHpiRjAlF8KYZSipWXYtllWH6Q==", - "dev": true, - "requires": { - "js-yaml": "^3.6.1", - "lcov-parse": "^0.0.10", - "log-driver": "^1.2.5", - "minimist": "^1.2.0", - "request": "^2.79.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "cst": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/cst/-/cst-0.4.10.tgz", - "integrity": "sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag==", - "dev": true, - "requires": { - "babel-runtime": "^6.9.2", - "babylon": "^6.8.1", - "source-map-support": "^0.4.0" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "data-uri-to-buffer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", - "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", - "dev": true, - "optional": true - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "dev": true, - "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" - } - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "dev": true, - "optional": true, - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "optional": true - } - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "doctoc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.3.1.tgz", - "integrity": "sha1-8BLjYD4xViVMLvIqyIxxkPVUJro=", - "dev": true, - "requires": { - "anchor-markdown-header": "^0.5.5", - "htmlparser2": "~3.9.2", - "markdown-to-ast": "~3.4.0", - "minimist": "~1.2.0", - "underscore": "~1.8.3", - "update-section": "^0.3.0" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "dev": true, - "optional": true - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-async": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", - "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", - "dev": true, - "requires": { - "onetime": "^1.0.0", - "set-immediate-shim": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "emoji-regex": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", - "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", - "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "uws": "~9.14.0", - "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "engine.io-client": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", - "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary2": "~1.0.2" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "dev": true, - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "dev": true, - "optional": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extract-zip": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "debug": "2.6.9", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", - "dev": true, - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz", - "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.9.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", - "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "minipass": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", - "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", - "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", - "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz", - "integrity": "sha1-8RwHUW3ZL4cZnbx+GDjqt81WyeA=", - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", - "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", - "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", - "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", - "dev": true, - "optional": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "optional": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", - "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", - "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-uri": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.2.tgz", - "integrity": "sha512-ZD325dMZOgerGqF/rF6vZXyFGTAay62svjQIT+X/oU2PtxYpFxvSkbsdi+oxIrsNxlZVd4y8wUDqkaExWTI/Cw==", - "dev": true, - "optional": true, - "requires": { - "data-uri-to-buffer": "1", - "debug": "2", - "extend": "3", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "2" - } - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^5.0.3", - "glob-parent": "^3.0.0", - "micromatch": "^2.3.7", - "ordered-read-streams": "^0.3.0", - "through2": "^0.6.0", - "to-absolute-glob": "^0.1.1", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "globule": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", - "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.4", - "minimatch": "~3.0.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "grunt": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.2.tgz", - "integrity": "sha1-TmpeaVtwRy/VME9fqeNCNoNqc7w=", - "dev": true, - "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~1.0.0", - "grunt-legacy-util": "~1.0.0", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", - "minimatch": "~3.0.2", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.2.8" - }, - "dependencies": { - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, - "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" - } - } - } - }, - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" - } - }, - "grunt-contrib-connect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-contrib-connect/-/grunt-contrib-connect-1.0.2.tgz", - "integrity": "sha1-XPkzuRpnOGBEJzwLJERgPNmIebo=", - "dev": true, - "requires": { - "async": "^1.5.2", - "connect": "^3.4.0", - "connect-livereload": "^0.5.0", - "http2": "^3.3.4", - "morgan": "^1.6.1", - "opn": "^4.0.0", - "portscanner": "^1.0.0", - "serve-index": "^1.7.1", - "serve-static": "^1.10.0" - } - }, - "grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "file-sync-cmp": "^0.1.0" - } - }, - "grunt-contrib-cssmin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-cssmin/-/grunt-contrib-cssmin-2.2.1.tgz", - "integrity": "sha512-IXNomhQ5ekVZbDbj/ik5YccoD9khU6LT2fDXqO1+/Txjq8cp0tQKjVS8i8EAbHOrSDkL7/UD6A7b+xj98gqh9w==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "clean-css": "~4.1.1", - "maxmin": "^2.1.0" - } - }, - "grunt-contrib-jshint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz", - "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "hooker": "^0.2.3", - "jshint": "~2.9.4" - } - }, - "grunt-contrib-uglify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.3.0.tgz", - "integrity": "sha512-W9O7lJE3PlD8VCc5fyaf98QV7f5wEDiU4PBIh0+/6UBbk2LhgzEFS0/p+taH5UD3+PlEn7QPN0o06Z0To6SqXw==", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "maxmin": "^1.1.0", - "uglify-js": "~3.3.0", - "uri-path": "^1.0.0" - }, - "dependencies": { - "gzip-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", - "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", - "dev": true, - "requires": { - "browserify-zlib": "^0.1.4", - "concat-stream": "^1.4.1" - } - }, - "maxmin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", - "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^1.0.0", - "pretty-bytes": "^1.0.0" - } - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.1.0" - } - } - } - }, - "grunt-contrib-watch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", - "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "gaze": "^1.1.0", - "lodash": "^4.17.10", - "tiny-lr": "^1.1.1" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - } - } - }, - "grunt-jscs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/grunt-jscs/-/grunt-jscs-3.0.1.tgz", - "integrity": "sha1-H65Q4+lV3546nZQlrsIqzK4AgJI=", - "dev": true, - "requires": { - "hooker": "~0.2.3", - "jscs": "~3.0.5", - "lodash": "~4.6.1", - "vow": "~0.4.1" - }, - "dependencies": { - "lodash": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.6.1.tgz", - "integrity": "sha1-3wDBFkrSNrGDz8OIel6NOMxjy7w=", - "dev": true - } - } - }, - "grunt-known-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", - "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", - "dev": true - }, - "grunt-legacy-log": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", - "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" - } - }, - "grunt-legacy-log-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", - "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", - "dev": true, - "requires": { - "chalk": "~1.1.1", - "lodash": "~4.3.0" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - } - } - }, - "grunt-legacy-util": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", - "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", - "dev": true, - "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.3.0", - "underscore.string": "~3.2.3", - "which": "~1.2.1" - }, - "dependencies": { - "lodash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", - "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", - "dev": true - } - } - }, - "grunt-protractor-runner": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/grunt-protractor-runner/-/grunt-protractor-runner-5.0.0.tgz", - "integrity": "sha1-hi1DwroPgq2TZOhh3Eqnmw5kJsE=", - "dev": true, - "requires": { - "protractor": "^5.0.0", - "split": "~1.0.0", - "through2": "~2.0.0" - } - }, - "grunt-protractor-webdriver": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/grunt-protractor-webdriver/-/grunt-protractor-webdriver-0.2.5.tgz", - "integrity": "sha1-vWgIslcBPA5hN+hoR+5nwyK/9l8=", - "dev": true, - "requires": { - "split": "^1.0.0" - } - }, - "grunt-sass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-2.1.0.tgz", - "integrity": "sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA==", - "dev": true, - "requires": { - "each-async": "^1.0.0", - "node-sass": "^4.7.2", - "object-assign": "^4.0.1" - } - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "^1.1.1", - "graceful-fs": "^4.1.2", - "strip-bom": "^2.0.0", - "through2": "^2.0.0", - "vinyl": "^1.0.0" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", - "dev": true, - "requires": { - "duplexer": "^0.1.1" - } - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "^1.0.2" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", - "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", - "dev": true - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hipchat-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", - "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", - "dev": true, - "optional": true, - "requires": { - "lodash": "^4.0.0", - "request": "^2.0.0" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "dev": true, - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - } - }, - "http-parser-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/http2/-/http2-3.3.6.tgz", - "integrity": "sha1-ffBiJ+ArW1pYQd7qCCObMZjQS+w=", - "dev": true - }, - "httpntlm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", - "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", - "dev": true, - "requires": { - "httpreq": ">=0.4.22", - "underscore": "~1.7.0" - }, - "dependencies": { - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - } - } - }, - "httpreq": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", - "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "i": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.5.tgz", - "integrity": "sha1-HSuFQVjsgWkRPGy39raAHpniEdU=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", - "dev": true, - "optional": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherit": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/inherit/-/inherit-2.2.6.tgz", - "integrity": "sha1-8WFLBshUToEo5CKchjR9tzrZeI0=", - "dev": true - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-alphabetical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", - "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", - "dev": true - }, - "is-alphanumerical": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", - "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", - "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-decimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", - "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-hexadecimal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", - "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "jasmine": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", - "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", - "dev": true, - "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.8.0" - }, - "dependencies": { - "jasmine-core": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", - "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", - "dev": true - } - } - }, - "jasmine-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.1.0.tgz", - "integrity": "sha1-pHheE11d9lAk38kiSVPfWFvSdmw=", - "dev": true - }, - "jasminewd2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", - "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", - "dev": true - }, - "jquery": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.2.1.tgz", - "integrity": "sha1-XE2d5lKvbNCncBVKYxu6ErAVx4c=" - }, - "jquery-ui": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", - "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=" - }, - "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", - "dev": true - }, - "js-yaml": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", - "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "jscs": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/jscs/-/jscs-3.0.7.tgz", - "integrity": "sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo=", - "dev": true, - "requires": { - "chalk": "~1.1.0", - "cli-table": "~0.3.1", - "commander": "~2.9.0", - "cst": "^0.4.3", - "estraverse": "^4.1.0", - "exit": "~0.1.2", - "glob": "^5.0.1", - "htmlparser2": "3.8.3", - "js-yaml": "~3.4.0", - "jscs-jsdoc": "^2.0.0", - "jscs-preset-wikimedia": "~1.0.0", - "jsonlint": "~1.6.2", - "lodash": "~3.10.0", - "minimatch": "~3.0.0", - "natural-compare": "~1.2.2", - "pathval": "~0.1.1", - "prompt": "~0.2.14", - "reserved-words": "^0.1.1", - "resolve": "^1.1.6", - "strip-bom": "^2.0.0", - "strip-json-comments": "~1.0.2", - "to-double-quotes": "^2.0.0", - "to-single-quotes": "^2.0.0", - "vow": "~0.4.8", - "vow-fs": "~0.3.4", - "xmlbuilder": "^3.1.0" - }, - "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "js-yaml": { - "version": "3.4.6", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.4.6.tgz", - "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=", - "dev": true, - "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0", - "inherit": "^2.2.2" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "xmlbuilder": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-3.1.0.tgz", - "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=", - "dev": true, - "requires": { - "lodash": "^3.5.0" - } - } - } - }, - "jscs-jsdoc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz", - "integrity": "sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE=", - "dev": true, - "requires": { - "comment-parser": "^0.3.1", - "jsdoctypeparser": "~1.2.0" - } - }, - "jscs-preset-wikimedia": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.0.tgz", - "integrity": "sha1-//VjNCA4/C6IJre7cwnDrjQG/H4=", - "dev": true - }, - "jsdoctypeparser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz", - "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=", - "dev": true, - "requires": { - "lodash": "^3.7.0" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - } - } - }, - "jshint": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "3.7.x", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonlint": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.2.tgz", - "integrity": "sha1-VzcEUIX1XrRVxosf9OvAG9UOiDA=", - "dev": true, - "requires": { - "JSV": ">= 4.0.x", - "nomnom": ">= 1.5.x" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", - "dev": true, - "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "karma": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.2.tgz", - "integrity": "sha1-TS25QChQpmVR+nhLAWT7CCTtjEs=", - "dev": true, - "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^1.4.1", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", - "log4js": "^2.3.9", - "mime": "^1.3.4", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.0.4", - "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.2.1" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", - "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", - "dev": true, - "requires": { - "dateformat": "^1.0.6", - "istanbul": "^0.4.0", - "lodash": "^4.17.0", - "minimatch": "^3.0.0", - "source-map": "^0.5.1" - } - }, - "karma-coveralls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/karma-coveralls/-/karma-coveralls-1.2.1.tgz", - "integrity": "sha1-7Uvpc5AmNx+A0OnbOXHDHz3CTUE=", - "dev": true, - "requires": { - "coveralls": "~3.0.0", - "lcov-result-merger": "^2.0.0", - "through2": "^2.0.0", - "vinyl-fs": "^3.0.2" - } - }, - "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "lcov-result-merger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcov-result-merger/-/lcov-result-merger-2.0.0.tgz", - "integrity": "sha512-CMjYOcPtl0G3SLrPWYDtZ4zyhsy/2heUf6RKwvyDcJRfyUBQbqLhAlS2PBhTKVCxGp7Ri8AYJ5SGNVEtbEo0fA==", - "dev": true, - "requires": { - "through2": "^2.0.1", - "vinyl": "^2.0.0", - "vinyl-fs": "^2.4.3" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "^3.2.0", - "glob-stream": "^5.3.2", - "graceful-fs": "^4.0.0", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "^0.3.0", - "lazystream": "^1.0.0", - "lodash.isequal": "^4.0.0", - "merge-stream": "^1.0.0", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.0", - "readable-stream": "^2.0.4", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^1.0.0", - "through2": "^2.0.0", - "through2-filter": "^2.0.0", - "vali-date": "^1.0.0", - "vinyl": "^1.0.0" - }, - "dependencies": { - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } - } - } - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libbase64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true - }, - "libmime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", - "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", - "dev": true, - "requires": { - "iconv-lite": "0.4.15", - "libbase64": "0.1.0", - "libqp": "1.1.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - } - } - }, - "libqp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "livereload-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz", - "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "log-driver": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", - "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", - "dev": true - }, - "log4js": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.7.0.tgz", - "integrity": "sha512-FyTwaPJfbfiK2AHc9ct/oFHNN4bJj0IQeqdO/LaDHhfjeBi8fnZU5rPcHOZhkYV0Aes31Ow+St1YTCluPtzs5g==", - "dev": true, - "requires": { - "amqplib": "^0.5.2", - "axios": "^0.15.3", - "circular-json": "^0.5.4", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "hipchat-notifier": "^1.1.0", - "loggly": "^1.1.0", - "mailgun-js": "^0.18.0", - "nodemailer": "^2.5.0", - "redis": "^2.7.1", - "semver": "^5.5.0", - "slack-node": "~0.2.0", - "streamroller": "0.7.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "loggly": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", - "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", - "dev": true, - "optional": true, - "requires": { - "json-stringify-safe": "5.0.x", - "request": "2.75.x", - "timespan": "2.3.x" - }, - "dependencies": { - "form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.75.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "bl": "~1.1.2", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.0.0", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.7", - "oauth-sign": "~0.8.1", - "qs": "~6.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1" - } - } - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "longest-streak": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-1.0.0.tgz", - "integrity": "sha1-0GWXxNTDG1LMsfXY+P5xSOr9aWU=", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "mailcomposer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", - "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", - "dev": true, - "optional": true, - "requires": { - "buildmail": "4.0.1", - "libmime": "3.0.0" - } - }, - "mailgun-js": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.0.tgz", - "integrity": "sha512-o0P6jjZlx5CQj12tvVgDTbgjTqVN0+5h6/6P1+3c6xmozVKBwniQ6Qt3MkCSF0+ueVTbobAfWyGpWRZMJu8t1g==", - "dev": true, - "optional": true, - "requires": { - "async": "~2.6.0", - "debug": "~3.1.0", - "form-data": "~2.3.0", - "inflection": "~1.12.0", - "is-stream": "^1.1.0", - "path-proxy": "~1.0.0", - "promisify-call": "^2.0.2", - "proxy-agent": "~3.0.0", - "tsscmp": "~1.0.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "optional": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - } - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "markdown-table": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-0.4.0.tgz", - "integrity": "sha1-iQwsGzv+g/sA5BKbjkz+ZFJw+dE=", - "dev": true - }, - "markdown-to-ast": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/markdown-to-ast/-/markdown-to-ast-3.4.0.tgz", - "integrity": "sha1-Diy6gTkLBUmpFT7DsNkVthwWS+c=", - "dev": true, - "requires": { - "debug": "^2.1.3", - "remark": "^5.0.1", - "structured-source": "^3.0.2", - "traverse": "^0.6.6" - } - }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, - "maxmin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", - "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^3.0.0", - "pretty-bytes": "^3.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, - "requires": { - "mime-db": "~1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "morgan": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", - "dev": true, - "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.1", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true - }, - "natural-compare": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.2.2.tgz", - "integrity": "sha1-H5bWDjFBysG20FZTzg2urHY69qo=", - "dev": true - }, - "ncp": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true, - "optional": true - }, - "node-gyp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", - "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "2", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.3.1", - "npmlog": "^4.0.0", - "request": "~2.79.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "qs": "~6.3.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1", - "uuid": "^3.0.0" - } - } - } - }, - "nodemailer": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", - "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", - "dev": true, - "optional": true, - "requires": { - "libmime": "3.0.0", - "mailcomposer": "4.0.1", - "nodemailer-direct-transport": "3.3.2", - "nodemailer-shared": "1.1.0", - "nodemailer-smtp-pool": "2.8.2", - "nodemailer-smtp-transport": "2.7.2", - "socks": "1.1.9" - }, - "dependencies": { - "socks": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", - "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", - "dev": true, - "optional": true, - "requires": { - "ip": "^1.1.2", - "smart-buffer": "^1.0.4" - } - } - } - }, - "nodemailer-direct-transport": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", - "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-fetch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", - "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", - "dev": true - }, - "nodemailer-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", - "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", - "dev": true, - "requires": { - "nodemailer-fetch": "1.6.0" - } - }, - "nodemailer-smtp-pool": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", - "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-wellknown": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", - "dev": true - }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "dev": true, - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", - "dev": true - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "dev": true, - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", - "dev": true - }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "now-and-later": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz", - "integrity": "sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "^1.0.1", - "readable-stream": "^2.0.1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "pac-proxy-agent": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz", - "integrity": "sha512-cDNAN1Ehjbf5EHkNY5qnRhGPUCp6SnpyVof5fRzN800QV1Y2OkzbH9rmjZkbBRa8igof903yOnjIl6z0SlAhxA==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "^4.2.0", - "debug": "^3.1.0", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^3.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "optional": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "optional": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "optional": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "optional": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "optional": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "optional": true - } - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parse-entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.2.tgz", - "integrity": "sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg==", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-proxy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", - "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", - "dev": true, - "optional": true, - "requires": { - "inflection": "~1.3.0" - }, - "dependencies": { - "inflection": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", - "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", - "dev": true, - "optional": true - } - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pathval": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-0.1.1.tgz", - "integrity": "sha1-CPkRzcqczllCiA2ngXvAtyO2bYI=", - "dev": true - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkginfo": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", - "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=", - "dev": true - }, - "portscanner": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-1.2.0.tgz", - "integrity": "sha1-sUu9olfRTDEPqcwJaCrwLUCWGAI=", - "dev": true, - "requires": { - "async": "1.5.2" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "promisify-call": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", - "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", - "dev": true, - "optional": true, - "requires": { - "with-callback": "^1.0.2" - } - }, - "prompt": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", - "dev": true, - "requires": { - "pkginfo": "0.x.x", - "read": "1.0.x", - "revalidator": "0.1.x", - "utile": "0.2.x", - "winston": "0.8.x" - } - }, - "protractor": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.2.tgz", - "integrity": "sha512-pw4uwwiy5lHZjIguxNpkEwJJa7hVz+bJsvaTI+IbXlfn2qXwzbF8eghW/RmrZwE2sGx82I8etb8lVjQ+JrjejA==", - "dev": true, - "requires": { - "@types/node": "^6.0.46", - "@types/q": "^0.0.32", - "@types/selenium-webdriver": "~2.53.39", - "blocking-proxy": "^1.0.0", - "chalk": "^1.1.3", - "glob": "^7.0.3", - "jasmine": "2.8.0", - "jasminewd2": "^2.1.0", - "optimist": "~0.6.0", - "q": "1.4.1", - "saucelabs": "^1.5.0", - "selenium-webdriver": "3.6.0", - "source-map-support": "~0.4.0", - "webdriver-js-extender": "^1.0.0", - "webdriver-manager": "^12.0.6" - }, - "dependencies": { - "adm-zip": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", - "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "webdriver-manager": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", - "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", - "dev": true, - "requires": { - "adm-zip": "^0.4.7", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.78.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" - } - } - } - }, - "proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.0.tgz", - "integrity": "sha512-g6n6vnk8fRf705ShN+FEXFG/SDJaW++lSs0d9KaJh4uBWW/wi7en4Cpo5VYQW3SZzAE121lhB/KLQrbURoubZw==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "^4.2.0", - "debug": "^3.1.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", - "pac-proxy-agent": "^2.0.1", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "puppeteer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.4.0.tgz", - "integrity": "sha512-WDnC1FSHTedvRSS8BZB73tPAx2svUCWFdcxVjrybw8pbKOAB1v5S/pW0EamkqQoL1mXiBc+v8lyYjhhzMHIk1Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "extract-zip": "^1.6.5", - "https-proxy-agent": "^2.1.0", - "mime": "^2.0.3", - "progress": "^2.0.0", - "proxy-from-env": "^1.0.0", - "rimraf": "^2.6.1", - "ws": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "q": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", - "dev": true, - "requires": { - "bytes": "1", - "string_decoder": "0.10" - }, - "dependencies": { - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", - "dev": true, - "optional": true, - "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" - } - }, - "redis-commands": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", - "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", - "dev": true, - "optional": true - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", - "dev": true, - "optional": true - }, - "regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "remark": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/remark/-/remark-5.1.0.tgz", - "integrity": "sha1-y0Y709vLS5l5STXu4c9x16jjBow=", - "dev": true, - "requires": { - "remark-parse": "^1.1.0", - "remark-stringify": "^1.1.0", - "unified": "^4.1.1" - } - }, - "remark-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-1.1.0.tgz", - "integrity": "sha1-w8oQ+ajaBGFcKPCapOMEUQUm7CE=", - "dev": true, - "requires": { - "collapse-white-space": "^1.0.0", - "extend": "^3.0.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0" - } - }, - "remark-stringify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-1.1.0.tgz", - "integrity": "sha1-pxBeJbnuK/mkm3XSxCPxGwauIJI=", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "extend": "^3.0.0", - "longest-streak": "^1.0.0", - "markdown-table": "^0.4.0", - "parse-entities": "^1.0.2", - "repeat-string": "^1.5.4", - "stringify-entities": "^1.0.1", - "unherit": "^1.0.4" - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.x.x" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - } - } - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "dependencies": { - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - } - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - } - } - }, - "requestretry": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", - "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", - "dev": true, - "optional": true, - "requires": { - "extend": "^3.0.0", - "lodash": "^4.15.0", - "request": "^2.74.0", - "when": "^3.7.7" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "reserved-words": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", - "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - } - }, - "saucelabs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", - "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", - "dev": true, - "requires": { - "https-proxy-agent": "^2.2.1" - }, - "dependencies": { - "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "selenium-webdriver": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", - "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", - "dev": true, - "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", - "tmp": "0.0.30", - "xml2js": "^0.4.17" - }, - "dependencies": { - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "^7.0.5" - } - } - } - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - }, - "dependencies": { - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - } - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slack-node": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", - "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", - "dev": true, - "optional": true, - "requires": { - "requestretry": "^1.2.2" - } - }, - "smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", - "dev": true - }, - "smtp-connection": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", - "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", - "dev": true, - "requires": { - "httpntlm": "1.6.1", - "nodemailer-shared": "1.1.0" - } - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "socket.io": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", - "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", - "dev": true, - "requires": { - "debug": "~2.6.6", - "engine.io": "~3.1.0", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.0.4", - "socket.io-parser": "~3.1.1" - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~2.6.4", - "engine.io-client": "~3.1.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.1.1", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", - "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "has-binary2": "~1.0.2", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "socks": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", - "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", - "dev": true, - "requires": { - "ip": "^1.1.4", - "smart-buffer": "^1.0.13" - } - }, - "socks-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", - "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "socks": "^1.1.10" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.4.17", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.17.tgz", - "integrity": "sha512-30c1Ch8FSjV0FwC253iftbbj0dU/OXoSg1LAEGZJUlGgjTNj6cu+DVqJWWIZJY5RXLWV4eFtR+4ouo0VIOYOTg==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", - "dev": true, - "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-entities": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", - "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", - "dev": true, - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "^1.0.0", - "strip-bom": "^2.0.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, - "structured-source": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", - "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", - "dev": true, - "requires": { - "boundary": "^1.0.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", - "dev": true, - "optional": true - }, - "timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", - "dev": true, - "optional": true - }, - "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "requires": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "tmp": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", - "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-double-quotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", - "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", - "dev": true - }, - "to-single-quotes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", - "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", - "dev": true - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", - "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", - "dev": true - }, - "trough": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.2.tgz", - "integrity": "sha512-FHkoUZvG6Egrv9XZAyYGKEyb1JMsFphgPjoczkZC2y6W93U1jswcVURB8MUvtsahEPEVACyxD47JAL63vF4JsQ==", - "dev": true - }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", - "dev": true, - "requires": { - "glob": "^6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "tsscmp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", - "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", - "dev": true, - "optional": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "~1.33.0" - } - } - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "3.3.24", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.24.tgz", - "integrity": "sha512-hS7+TDiqIqvWScCcKRybCQzmMnEzJ4ryl9ErRmW4GFyG48p0/dKZiy/5mVLbsFzU8CCnCgQdxMiJzZythvLzCg==", - "dev": true, - "requires": { - "commander": "~2.15.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "underscore.string": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", - "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", - "dev": true - }, - "unherit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", - "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" - } - }, - "unified": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-4.2.1.tgz", - "integrity": "sha1-dv9Dqo2kMPbn5KVchOusKtLPzS4=", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "has": "^1.0.1", - "once": "^1.3.3", - "trough": "^1.0.0", - "vfile": "^1.0.0" - } - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "^1.0.0", - "through2-filter": "^2.0.0" - } - }, - "unist-util-is": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", - "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", - "dev": true - }, - "unist-util-remove-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", - "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", - "dev": true, - "requires": { - "unist-util-visit": "^1.1.0" - } - }, - "unist-util-visit": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.1.tgz", - "integrity": "sha512-0fdB9EQJU0tho5tK0VzOJzAQpPv2LyLZ030b10GxuzAWEfvd54mpY7BMjQ1L69k2YNvL+SvxRzH0yUIehOO8aA==", - "dev": true, - "requires": { - "unist-util-is": "^2.1.1" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "update-section": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", - "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=", - "dev": true - }, - "uri-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", - "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utile": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", - "dev": true, - "requires": { - "async": "~0.2.9", - "deep-equal": "*", - "i": "0.3.x", - "mkdirp": "0.x.x", - "ncp": "0.4.x", - "rimraf": "2.x.x" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - } - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", - "dev": true - }, - "uws": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", - "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", - "dev": true, - "optional": true - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, - "vfile": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-1.4.0.tgz", - "integrity": "sha1-wP1vpIT43r23cfaMMe112I2pf+c=", - "dev": true - }, - "vfile-location": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.3.tgz", - "integrity": "sha512-zM5/l4lfw1CBoPx3Jimxoc5RNDAHHpk6AM6LM0pTIkm5SUSsx8ZekZ0PVdf0WEZ7kjlhSt7ZlqbRL6Cd6dBs6A==", - "dev": true - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - } - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "vow": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/vow/-/vow-0.4.16.tgz", - "integrity": "sha1-u51U2TjV+AUg1linQOeoleMP7us=", - "dev": true - }, - "vow-fs": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.6.tgz", - "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=", - "dev": true, - "requires": { - "glob": "^7.0.5", - "uuid": "^2.0.2", - "vow": "^0.4.7", - "vow-queue": "^0.4.1" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } - } - }, - "vow-queue": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/vow-queue/-/vow-queue-0.4.2.tgz", - "integrity": "sha1-5/4XFg4Vx8QYTRtmapvGThjjAYQ=", - "dev": true, - "requires": { - "vow": "~0.4.0" - } - }, - "webdriver-js-extender": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", - "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", - "dev": true, - "requires": { - "@types/selenium-webdriver": "^2.53.35", - "selenium-webdriver": "^2.53.2" - }, - "dependencies": { - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.53.3", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", - "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "^2.2.8", - "tmp": "0.0.24", - "ws": "^1.0.1", - "xml2js": "0.4.4" - } - }, - "tmp": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.x", - "xmlbuilder": ">=1.0.0" - } - } - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true, - "optional": true - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "winston": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", - "dev": true, - "requires": { - "async": "0.2.x", - "colors": "0.6.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "pkginfo": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", - "dev": true - } - } - }, - "with-callback": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", - "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dev": true, - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "optional": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "~1.0.1" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } -} diff --git a/package.json b/package.json index 96368511f..ae221a8d0 100644 --- a/package.json +++ b/package.json @@ -37,28 +37,28 @@ "devDependencies": { "components-jqueryui": "1.12.1", "connect": "^3.6.6", - "core-js": "^2.4.1", - "coveralls": "^3.0.1", - "doctoc": "^1.3.1", - "grunt": "^1.0.2", - "grunt-cli": "^1.2.0", - "grunt-contrib-connect": "^1.0.2", + "core-js": "^3.0.0", + "coveralls": "^3.0.3", + "doctoc": "^1.4.0", + "grunt": "^1.0.4", + "grunt-cli": "^1.3.2", + "grunt-contrib-connect": "^2.0.0", "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-cssmin": "^2.2.1", - "grunt-contrib-jshint": "^1.0.0", - "grunt-contrib-uglify": "^3.3.0", + "grunt-contrib-cssmin": "^3.0.0", + "grunt-contrib-jshint": "^2.1.0", + "grunt-contrib-uglify": "^4.0.1", "grunt-contrib-watch": "^1.1.0", "grunt-jscs": "^3.0.1", "grunt-protractor-runner": "^5.0.0", "grunt-protractor-webdriver": "^0.2.5", - "grunt-sass": "^2.1.0", - "jasmine-core": "^3.1.0", - "karma": "^2.0.2", + "grunt-sass": "2.1.0", + "jasmine-core": "^3.3.0", + "karma": "^4.0.1", "karma-chrome-launcher": "^2.2.0", "karma-coverage": "^1.1.2", - "karma-coveralls": "^1.2.1", - "karma-jasmine": "^1.1.2", - "puppeteer": "^1.4.0", + "karma-coveralls": "^2.1.0", + "karma-jasmine": "^2.0.1", + "puppeteer": "^1.13.0", "serve-static": "^1.13.2" } } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..27ff19c4a --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5413 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@textlint/ast-node-types@^4.0.3": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.1.tgz#978fa10e23468114462fc08ef29f96980c12a8ef" + integrity sha512-Pqg1LTJpF929Ovi/lCaPqlyz8yDwBFbQulC0jyQcbRAoTxYS4AZMc48Ug2yk0so5hISQXKrlAxyVBmBVl9EKGA== + +"@textlint/markdown-to-ast@~6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz#e7c89e5ad15d17dcd8e5a62758358936827658fa" + integrity sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ== + dependencies: + "@textlint/ast-node-types" "^4.0.3" + debug "^2.1.3" + remark-frontmatter "^1.2.0" + remark-parse "^5.0.0" + structured-source "^3.0.2" + traverse "^0.6.6" + unified "^6.1.6" + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/selenium-webdriver@^3.0.0": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz#024c24051c3798e9a0cf5cceb1c893140df1bc31" + integrity sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q== + +JSV@^4.0.x: + version "4.0.2" + resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" + integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + +accepts@~1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +adm-zip@^0.4.9: + version "0.4.13" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" + integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +anchor-markdown-header@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" + integrity sha1-BFBj125qH5zTJ6V6ASaqD97Dcac= + dependencies: + emoji-regex "~6.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.2, argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" + integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async@0.2.x, async@~0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + +async@1.x, async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.6.0, async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-runtime@^6.9.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.8.1: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +bail@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" + integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +basic-auth@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +bluebird@^3.3.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + +body-parser@^1.16.1: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +body@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= + dependencies: + continuable-cache "^0.3.1" + error "^7.0.0" + raw-body "~1.1.0" + safe-json-parse "~1.0.1" + +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + integrity sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browserstack@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" + integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== + dependencies: + https-proxy-agent "^2.2.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +bytes@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== + +character-entities@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== + +character-reference-invalid@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== + +chokidar@^2.0.3: + version "2.1.5" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" + integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +cli-table@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + dependencies: + colors "1.0.3" + +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= + dependencies: + exit "0.1.2" + glob "^7.1.1" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +coffeescript@~1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" + integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= + +collapse-white-space@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@0.6.x: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +colors@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commander@~2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + +comment-parser@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.2.tgz#3c03f0776b86a36dfd9a0a2c97c6307f332082fe" + integrity sha1-PAPwd2uGo239mgosl8YwfzMggv4= + dependencies: + readable-stream "^2.0.4" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1, component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +components-jqueryui@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/components-jqueryui/-/components-jqueryui-1.12.1.tgz#617076f128f3be4c265f3e2db50471ef96cd9cee" + integrity sha1-YXB28SjzvkwmXz4ttQRx75bNnO4= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-livereload@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.6.1.tgz#1ac0c8bb9d9cfd5b28b629987a56a9239db9baaa" + integrity sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g== + +connect@^3.6.0, connect@^3.6.6: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +console-browserify@1.1.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +continuable-cache@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= + +convert-source-map@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.2.0, core-js@^2.4.0: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" + integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +coveralls@^3.0.3, coveralls@~3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" + integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== + dependencies: + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.86.0" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cst@^0.4.3: + version "0.4.10" + resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" + integrity sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag== + dependencies: + babel-runtime "^6.9.2" + babylon "^6.8.1" + source-map-support "^0.4.0" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" + integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +dateformat@^1.0.6, dateformat@~1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@*: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +doctoc@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" + integrity sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg== + dependencies: + "@textlint/markdown-to-ast" "~6.0.9" + anchor-markdown-header "^0.5.5" + htmlparser2 "~3.9.2" + minimist "~1.2.0" + underscore "~1.8.3" + update-section "^0.3.0" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.6.0, duplexify@^3.6.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-async@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" + integrity sha1-3uUim98KtrogEqOV4bhpq/iBNHM= + dependencies: + onetime "^1.0.0" + set-immediate-shim "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +emoji-regex@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" + integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI= + +encodeurl@~1.0.1, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + +es6-promise@^4.0.3: + version "4.2.6" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" + integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + +estraverse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter2@~0.4.13: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +exit@0.1.2, exit@0.1.x, exit@^0.1.2, exit@~0.1.1, exit@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-zip@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fault@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" + integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== + dependencies: + format "^0.2.2" + +faye-websocket@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +figures@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-sync-cmp@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" + integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs= + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +findup-sync@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= + dependencies: + glob "~5.0.0" + +fined@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" + integrity sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + dependencies: + debug "^3.2.6" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +format@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= + dependencies: + null-check "^1.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0, gaze@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getobject@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" + integrity sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob@^5.0.1, glob@^5.0.15, glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.0.0: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" + integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +grunt-cli@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.3.2.tgz#60f12d12c1b5aae94ae3469c6b5fe24e960014e8" + integrity sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ== + dependencies: + grunt-known-options "~1.1.0" + interpret "~1.1.0" + liftoff "~2.5.0" + nopt "~4.0.1" + v8flags "~3.1.1" + +grunt-cli@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" + integrity sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg= + dependencies: + findup-sync "~0.3.0" + grunt-known-options "~1.1.0" + nopt "~3.0.6" + resolve "~1.1.0" + +grunt-contrib-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz#7ee86838f351f72c12186143ebc60823d8d524dd" + integrity sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA== + dependencies: + async "^2.6.1" + connect "^3.6.6" + connect-livereload "^0.6.0" + morgan "^1.9.0" + node-http2 "^4.0.1" + opn "^5.3.0" + portscanner "^2.2.0" + serve-index "^1.9.1" + serve-static "^1.13.2" + +grunt-contrib-copy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz#7060c6581e904b8ab0d00f076e0a8f6e3e7c3573" + integrity sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM= + dependencies: + chalk "^1.1.1" + file-sync-cmp "^0.1.0" + +grunt-contrib-cssmin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-3.0.0.tgz#1767c0a062f4b7353c5adcadc52dcff7197d4d89" + integrity sha512-eXpooYmVGKMs/xV7DzTLgJFPVOfMuawPD3x0JwhlH0mumq2NtH3xsxaHxp1Y3NKxp0j0tRhFS6kSBRsz6TuTGg== + dependencies: + chalk "^2.4.1" + clean-css "~4.2.1" + maxmin "^2.1.0" + +grunt-contrib-jshint@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-jshint/-/grunt-contrib-jshint-2.1.0.tgz#3d789807579034299da1b41c4d70e1ba722973ed" + integrity sha512-65S2/C/6RfjY/umTxfwXXn+wVvaYmykHkHSsW6Q6rhkbv3oudTEgqnFFZvWzWCoHUb+3GMZLbP3oSrNyvshmIQ== + dependencies: + chalk "^2.4.2" + hooker "^0.2.3" + jshint "~2.10.2" + +grunt-contrib-uglify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz#68a7b62fa045ce8e2c7574d1bdcd3b96b8a686b1" + integrity sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg== + dependencies: + chalk "^2.4.1" + maxmin "^2.1.0" + uglify-js "^3.5.0" + uri-path "^1.0.0" + +grunt-contrib-watch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4" + integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== + dependencies: + async "^2.6.0" + gaze "^1.1.0" + lodash "^4.17.10" + tiny-lr "^1.1.1" + +grunt-jscs@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/grunt-jscs/-/grunt-jscs-3.0.1.tgz#1fae50e3e955df9e3a9d9425aec22accae008092" + integrity sha1-H65Q4+lV3546nZQlrsIqzK4AgJI= + dependencies: + hooker "~0.2.3" + jscs "~3.0.5" + lodash "~4.6.1" + vow "~0.4.1" + +grunt-known-options@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" + integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== + +grunt-legacy-log-utils@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" + integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== + dependencies: + chalk "~2.4.1" + lodash "~4.17.10" + +grunt-legacy-log@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" + integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== + dependencies: + colors "~1.1.2" + grunt-legacy-log-utils "~2.0.0" + hooker "~0.2.3" + lodash "~4.17.5" + +grunt-legacy-util@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" + integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== + dependencies: + async "~1.5.2" + exit "~0.1.1" + getobject "~0.1.0" + hooker "~0.2.3" + lodash "~4.17.10" + underscore.string "~3.3.4" + which "~1.3.0" + +grunt-protractor-runner@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/grunt-protractor-runner/-/grunt-protractor-runner-5.0.0.tgz#862d43c2ba0f82ad9364e861dc4aa79b0e6426c1" + integrity sha1-hi1DwroPgq2TZOhh3Eqnmw5kJsE= + dependencies: + protractor "^5.0.0" + split "~1.0.0" + through2 "~2.0.0" + +grunt-protractor-webdriver@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/grunt-protractor-webdriver/-/grunt-protractor-webdriver-0.2.5.tgz#bd6808b257013c0e6137e86847ee67c322bff65f" + integrity sha1-vWgIslcBPA5hN+hoR+5nwyK/9l8= + dependencies: + split "^1.0.0" + +grunt-sass@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-2.1.0.tgz#b7ba1d85ef4c2d9b7d8195fe65f664ac7554efa1" + integrity sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA== + dependencies: + each-async "^1.0.0" + node-sass "^4.7.2" + object-assign "^4.0.1" + +grunt@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.4.tgz#c799883945a53a3d07622e0737c8f70bfe19eb38" + integrity sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ== + dependencies: + coffeescript "~1.10.0" + dateformat "~1.0.12" + eventemitter2 "~0.4.13" + exit "~0.1.1" + findup-sync "~0.3.0" + glob "~7.0.0" + grunt-cli "~1.2.0" + grunt-known-options "~1.1.0" + grunt-legacy-log "~2.0.0" + grunt-legacy-util "~1.1.1" + iconv-lite "~0.4.13" + js-yaml "~3.13.0" + minimatch "~3.0.2" + mkdirp "~0.5.1" + nopt "~3.0.6" + path-is-absolute "~1.0.0" + rimraf "~2.6.2" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + +handlebars@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" + integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hooker@^0.2.3, hooker@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" + integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk= + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +htmlparser2@3.8.3, htmlparser2@3.8.x: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +htmlparser2@~3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" + integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== + +http-proxy@^1.13.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + dependencies: + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= + +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +i@0.3.x: + version "0.3.6" + resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" + integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherit@^2.2.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" + integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +interpret@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== + +is-alphanumerical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.4, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-decimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-number-like@^1.0.3: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" + integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== + dependencies: + lodash.isfinite "^3.3.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-whitespace-character@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" + integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" + integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@0.1.x, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-core@^3.3, jasmine-core@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.3.0.tgz#dea1cdc634bc93c7e0d4ad27185df30fa971b10e" + integrity sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA== + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jquery-ui@^1.12.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" + integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= + +jquery@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" + integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== + +js-base64@^2.1.8: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + +js-yaml@3.x, js-yaml@^3.11.0, js-yaml@~3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" + integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.4.0: + version "3.4.6" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" + integrity sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA= + dependencies: + argparse "^1.0.2" + esprima "^2.6.0" + inherit "^2.2.2" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jscs-jsdoc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" + integrity sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE= + dependencies: + comment-parser "^0.3.1" + jsdoctypeparser "~1.2.0" + +jscs-preset-wikimedia@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz#a6a5fa5967fd67a5d609038e1c794eaf41d4233d" + integrity sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA== + +jscs@~3.0.5: + version "3.0.7" + resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.7.tgz#7141b4dff5b86e32d0e99d764b836767c30d201a" + integrity sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo= + dependencies: + chalk "~1.1.0" + cli-table "~0.3.1" + commander "~2.9.0" + cst "^0.4.3" + estraverse "^4.1.0" + exit "~0.1.2" + glob "^5.0.1" + htmlparser2 "3.8.3" + js-yaml "~3.4.0" + jscs-jsdoc "^2.0.0" + jscs-preset-wikimedia "~1.0.0" + jsonlint "~1.6.2" + lodash "~3.10.0" + minimatch "~3.0.0" + natural-compare "~1.2.2" + pathval "~0.1.1" + prompt "~0.2.14" + reserved-words "^0.1.1" + resolve "^1.1.6" + strip-bom "^2.0.0" + strip-json-comments "~1.0.2" + to-double-quotes "^2.0.0" + to-single-quotes "^2.0.0" + vow "~0.4.8" + vow-fs "~0.3.4" + xmlbuilder "^3.1.0" + +jsdoctypeparser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" + integrity sha1-597cFToRhJ/8UUEUSuhqfvDCU5I= + dependencies: + lodash "^3.7.0" + +jshint@~2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.2.tgz#ed6626c4f8223c98e94aaea62767435427a49a3d" + integrity sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA== + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "~4.17.11" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonlint@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" + integrity sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A== + dependencies: + JSV "^4.0.x" + nomnom "^1.5.x" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.1.tgz#c5d32df7274042282b157efb16e522b43435e01a" + integrity sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-coverage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" + integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^4.17.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-coveralls@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/karma-coveralls/-/karma-coveralls-2.1.0.tgz#b0fde853d0a7f35c5db8c8e56706b760f1069e2c" + integrity sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw== + dependencies: + coveralls "~3.0.0" + lcov-result-merger "^3.0.0" + through2 "^2.0.0" + vinyl-fs "^3.0.2" + +karma-jasmine@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" + integrity sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA== + dependencies: + jasmine-core "^3.3" + +karma@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.1.tgz#2581d6caa0d4cd28b65131561b47bad6d5478773" + integrity sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A== + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + braces "^2.3.2" + chokidar "^2.0.3" + colors "^1.1.0" + connect "^3.6.0" + core-js "^2.2.0" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^4.17.11" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + useragent "2.3.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcov-parse@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= + +lcov-result-merger@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz#ae6d1be663dbf7d586d8004642359d39de72039e" + integrity sha512-vGXaMNGZRr4cYvW+xMVg+rg7qd5DX9SbGXl+0S3k85+gRZVK4K7UvxPWzKb/qiMwe+4bx3EOrW2o4mbdb1WnsA== + dependencies: + through2 "^2.0.3" + vinyl "^2.1.0" + vinyl-fs "^3.0.2" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +liftoff@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= + dependencies: + extend "^3.0.0" + findup-sync "^2.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +livereload-js@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" + integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.isfinite@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" + integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== + +lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= + +lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +lodash@~4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.6.1.tgz#df00c1164ad236b183cfc3887a5e8d38cc63cbbc" + integrity sha1-3wDBFkrSNrGDz8OIel6NOMxjy7w= + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +log4js@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.0.tgz#57983c6a443546a8c8607e9cb045d2a117c27644" + integrity sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.2" + streamroller "^1.0.4" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@4.1.x, lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" + integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== + +maxmin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^3.0.0" + pretty-bytes "^3.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== + dependencies: + mime-db "~1.38.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mime@^2.0.3, mime@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" + integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +morgan@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.2" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.10.0, nan@^2.9.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@~1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" + integrity sha1-H5bWDjFBysG20FZTzg2urHY69qo= + +ncp@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" + integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= + +neo-async@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-http2@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/node-http2/-/node-http2-4.0.1.tgz#164ff53b5dd22c84f0af142b877c5eaeb6809959" + integrity sha1-Fk/1O13SLITwrxQrh3xerraAmVk= + dependencies: + assert "1.4.1" + events "1.1.1" + https-browserify "0.0.1" + setimmediate "^1.0.5" + stream-browserify "2.0.1" + timers-browserify "2.0.2" + url "^0.11.0" + websocket-stream "^5.0.1" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-sass@^4.7.2: + version "4.11.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" + integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.10.0" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +nomnom@^1.5.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + +"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1, nopt@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +now-and-later@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" + integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= + dependencies: + once "^1.3.2" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +opn@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +pako@~1.0.2: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parse-entities@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" + integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pathval@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" + integrity sha1-CPkRzcqczllCiA2ngXvAtyO2bYI= + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkginfo@0.3.x: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" + integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= + +pkginfo@0.x.x: + version "0.4.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" + integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= + +portscanner@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" + integrity sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw== + dependencies: + async "^2.6.0" + is-number-like "^1.0.3" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-bytes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= + dependencies: + number-is-nan "^1.0.0" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +progress@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompt@~0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" + integrity sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w= + dependencies: + pkginfo "0.x.x" + read "1.0.x" + revalidator "0.1.x" + utile "0.2.x" + winston "0.8.x" + +protractor@^5.0.0: + version "5.4.2" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" + integrity sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.0.6" + +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +puppeteer@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.13.0.tgz#187ccf5ed5caf08ed1291b262d033cc364bf88ab" + integrity sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ== + dependencies: + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.5.2, qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +qs@^6.4.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +range-parser@^1.2.0, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +raw-body@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= + dependencies: + bytes "1" + string_decoder "0.10" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@1.0.x: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" + integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remark-frontmatter@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz#bc28c0c913fa0b9dd26f17304bc47b856b2ea2de" + integrity sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A== + dependencies: + fault "^1.0.1" + xtend "^4.0.1" + +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replace-ext@1.0.0, replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +request@^2.86.0, request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reserved-words@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.x, resolve@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +revalidator@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" + integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= + +rfdc@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" + integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== + +rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-parse@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@^1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@^1.0.0, set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.0, source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.1, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split@^1.0.0, split@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +state-toggle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +streamroller@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.4.tgz#d485c7624796d5e2eb34190c79afcbf006afb5e6" + integrity sha512-Wc2Gm5ygjSX8ZpW9J7Y9FwiSzTlKSvcl0FTTMd3rn7RoxDXpBW+xD9TY5sWL2n0UR61COB0LG1BQvN6nTUQbLQ== + dependencies: + async "^2.6.1" + date-format "^2.0.0" + debug "^3.1.0" + fs-extra "^7.0.0" + lodash "^4.17.10" + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@0.10, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@1.0.x, strip-json-comments@~1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + integrity sha1-3YAkJeD1PcSm56yjdSkBoczaevU= + dependencies: + boundary "^1.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tar@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y= + dependencies: + setimmediate "^1.0.4" + +tiny-lr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== + dependencies: + body "^5.1.0" + debug "^3.1.0" + faye-websocket "~0.10.0" + livereload-js "^2.3.0" + object-assign "^4.1.0" + qs "^6.4.0" + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.0.33, tmp@0.0.x: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-double-quotes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" + integrity sha1-qvIx1vqUiUn4GTAburRITYWI5Kc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-single-quotes@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" + integrity sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU= + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-trailing-lines@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4, uglify-js@^3.5.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.2.tgz#dc0c7ac2da0a4b7d15e84266818ff30e82529474" + integrity sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +underscore.string@~3.3.4: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + +unherit@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^6.1.6: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unist-util-is@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== + +unist-util-remove-position@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-visit-parents@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== + dependencies: + unist-util-is "^2.1.2" + +unist-util-visit@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== + dependencies: + unist-util-visit-parents "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +update-section@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" + integrity sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +uri-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32" + integrity sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI= + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +utile@0.2.x: + version "0.2.1" + resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" + integrity sha1-kwyI6ZCY1iIINMNWy9mncFItkNc= + dependencies: + async "~0.2.9" + deep-equal "*" + i "0.3.x" + mkdirp "0.x.x" + ncp "0.4.x" + rimraf "2.x.x" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8flags@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.2.tgz#fc5cd0c227428181e6c29b2992e4f8f1da5e0c9f" + integrity sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" + integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vinyl-fs@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0, vinyl@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +vow-fs@~0.3.4: + version "0.3.6" + resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" + integrity sha1-LUxZviLivyYY3fWXq0uqkjvnIA0= + dependencies: + glob "^7.0.5" + uuid "^2.0.2" + vow "^0.4.7" + vow-queue "^0.4.1" + +vow-queue@^0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.3.tgz#4ba8f64b56e9212c0dbe57f1405aeebd54cce78d" + integrity sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw== + dependencies: + vow "^0.4.17" + +vow@^0.4.17, vow@^0.4.7, vow@~0.4.1, vow@~0.4.8: + version "0.4.19" + resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.19.tgz#cc5ef4d6bb6972d830830a7c9ecf8ad834a7c525" + integrity sha512-S+0+CiQlbUhTNWMlJdqo/ARuXOttXdvw5ACGyh1W97NFHUdwt3Fzyaus03Kvdmo733dwnYS9AGJSDg0Zu8mNfA== + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.0.6: + version "12.1.1" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.1.tgz#66c3271f69cefdaa9fdfca617ae95afae41c3c62" + integrity sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +websocket-stream@^5.0.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.3.0.tgz#aeeb2919c437133082c915ab74d21ec7849dd618" + integrity sha512-L4kN0NYwZJc0q7QKVHyjS7oNx2TuLyx6P2RDVJwejuKRYklU72FwLMRmQP/1UEYwNVTJgjBtNpde4NvqeyswLQ== + dependencies: + duplexify "^3.6.1" + inherits "^2.0.1" + readable-stream "^3.0.0" + safe-buffer "^5.1.2" + ws "^6.1.2" + xtend "^4.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +winston@0.8.x: + version "0.8.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" + integrity sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA= + dependencies: + async "0.2.x" + colors "0.6.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + pkginfo "0.3.x" + stack-trace "0.0.x" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.1.0, ws@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" + integrity sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE= + dependencies: + lodash "^3.5.0" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= From 666c0443802173a85d458180e5dce360c0a1df19 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 13:50:53 -0700 Subject: [PATCH 0023/1298] yarn doc tweaks --- PULL_REQUEST_TEMPLATE.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 59b445115..373a25c03 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -3,5 +3,5 @@ Please explain the changes you made here. Include an example of what your change ### Checklist - [ ] Created tests which fail without the change (if possible) -- [ ] All tests passing (`npm test`) +- [ ] All tests passing (`yarn test`) - [ ] Extended the README / documentation, if necessary diff --git a/package.json b/package.json index ae221a8d0..55bf8c989 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "test": "grunt lint && karma start karma.conf.js", "lint": "grunt lint", "reset": "rm -rf dist node_modules", - "prepublishOnly": "npm build" + "prepublishOnly": "yarn build" }, "keywords": [ "gridstack", From 980cd8fe1c6ec1e6ed593bdf72d269daa7a8fe98 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Thu, 28 Mar 2019 19:53:13 -0700 Subject: [PATCH 0024/1298] removed item-content z-index * there is no need for the regular grid content to have a topmost z-index (dragging and placeholder still render on top unchanged) this was causing modal dialogs to grid content to be clipped and not render correctly --- src/gridstack.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gridstack.scss b/src/gridstack.scss index 43692bfb6..57397bd7e 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -50,7 +50,6 @@ $animation_speed: .3s !default; right: $horizontal_padding / 2; bottom: 0; width: auto; - z-index: 0; overflow-x: hidden; overflow-y: auto; } From 77b6595fc688ec05b25fbae188d14ac07f30f8b9 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Fri, 29 Mar 2019 10:59:03 -0700 Subject: [PATCH 0025/1298] prep for 0.5.0 release --- README.md | 16 +++++++++------- bower.json | 2 +- doc/CHANGES.md | 10 ++++++++++ package.json | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 7f5af6a88..28dea11de 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Join gridstack.js on Slack: https://gridstackjs.troolee.com **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [gridstack.js News](#gridstackjs-news) + - [Demo and examples](#demo-and-examples) - [Usage](#usage) - [Requirements](#requirements) @@ -36,7 +36,7 @@ Join gridstack.js on Slack: https://gridstackjs.troolee.com - [Changes](#changes) - [The Team](#the-team) - + Demo and examples ==== @@ -78,9 +78,9 @@ Usage * Using CDN: ```html - - - + + + ``` * Using bower: @@ -97,7 +97,7 @@ $ bower install gridstack $ npm install gridstack ``` -You can download files from `dist` directory as well. +You can download source and build and use `dist` directory as well for latest non published code. ## Basic usage @@ -309,11 +309,13 @@ for i in range(N): There are at least two more issues with gridstack in IE8 with jQueryUI resizable (it seems it doesn't work) and droppable. If you have any suggestions about support of IE8 you are welcome here: https://github.com/gridstack/gridstack.js/issues/76 + Changes ===== diff --git a/bower.json b/bower.json index b400ead99..1a074a74f 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "1.0.0-dev", + "version": "0.5.0", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index bebbe2970..f56adc370 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -6,6 +6,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [v1.0.0 (development)](#v100-development) +- [v0.5.0 (2019-03-29)](#v050-2019-03-29) - [v0.4.0 (2018-05-11)](#v040-2018-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) - [v0.2.6 (2016-08-17)](#v026-2016-08-17) @@ -21,10 +22,19 @@ Change log ## v1.0.0 (development) +TBD + +## v0.5.0 (2019-03-29) + - emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/gridstack/gridstack.js/issues/823)). - don't throw error if no bounding scroll element is found ([#891](https://github.com/gridstack/gridstack.js/issues/891)). - don't push locked widgets even if they are at the top of the grid ([#882](https://github.com/gridstack/gridstack.js/issues/882)). +- RequireJS and CommonJS now export on the `exports` module fix ([#643](https://github.com/gridstack/gridstack.js/issues/643)). +- automatically scroll page when widget is moving beyond viewport ([#827](https://github.com/gridstack/gridstack.js/issues/827)). - removed lodash dependencies ([#693](https://github.com/gridstack/gridstack.js/issues/693)). +- don't overwrite globals jQuery when in a modular environment ([#974](https://github.com/gridstack/gridstack.js/pull/974)). +- removed z-index from `.grid-stack-item-content` causing child modal dialog clipping ([#984](https://github.com/gridstack/gridstack.js/pull/984)). +- convert project to use yarn ([#983](https://github.com/gridstack/gridstack.js/pull/983)). ## v0.4.0 (2018-05-11) diff --git a/package.json b/package.json index 55bf8c989..c14b4de1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "1.0.0-dev", + "version": "0.5.0", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 1cc01ccbc..25b25f996 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,5 +1,5 @@ /** - * gridstack.js 1.0.0-dev + * gridstack.js 0.5.0 * http://troolee.github.io/gridstack.js/ * (c) 2014-2017 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.js b/src/gridstack.js index 32b834045..9500e59f6 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 1.0.0-dev + * gridstack.js 0.5.0 * http://troolee.github.io/gridstack.js/ * (c) 2014-2018 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. From 17a1cd79c4b86a23ab361b08e4403f07af73d237 Mon Sep 17 00:00:00 2001 From: Alain Dumesny <> Date: Fri, 29 Mar 2019 15:53:41 -0700 Subject: [PATCH 0026/1298] fixed gsresizestop doc --- doc/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/README.md b/doc/README.md index bf660d504..6a3bd403f 100644 --- a/doc/README.md +++ b/doc/README.md @@ -206,6 +206,8 @@ $('.grid-stack').on('resizestart', function(event, ui) { ``` ### gsresizestop(event, ui) +**Note**: this is a custom event name that is guaranteed to be called +**after** the jqueryui resizestop event where we update `data-gs-width` and `data-gs-height`. ```javascript $('.grid-stack').on('gsresizestop', function(event, elem) { From 39bfee7658c5df38ded2631278756d1bcfaf5293 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2019 21:15:14 +0000 Subject: [PATCH 0027/1298] Bump jquery from 3.3.1 to 3.4.0 Bumps [jquery](https://github.com/jquery/jquery) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/jquery/jquery/releases) - [Commits](https://github.com/jquery/jquery/compare/3.3.1...3.4.0) Signed-off-by: dependabot[bot] --- yarn.lock | 10826 ++++++++++++++++++++++++++-------------------------- 1 file changed, 5413 insertions(+), 5413 deletions(-) diff --git a/yarn.lock b/yarn.lock index 27ff19c4a..7dbcc46a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5413 +1,5413 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@textlint/ast-node-types@^4.0.3": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.1.tgz#978fa10e23468114462fc08ef29f96980c12a8ef" - integrity sha512-Pqg1LTJpF929Ovi/lCaPqlyz8yDwBFbQulC0jyQcbRAoTxYS4AZMc48Ug2yk0so5hISQXKrlAxyVBmBVl9EKGA== - -"@textlint/markdown-to-ast@~6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz#e7c89e5ad15d17dcd8e5a62758358936827658fa" - integrity sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ== - dependencies: - "@textlint/ast-node-types" "^4.0.3" - debug "^2.1.3" - remark-frontmatter "^1.2.0" - remark-parse "^5.0.0" - structured-source "^3.0.2" - traverse "^0.6.6" - unified "^6.1.6" - -"@types/q@^0.0.32": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" - integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= - -"@types/selenium-webdriver@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz#024c24051c3798e9a0cf5cceb1c893140df1bc31" - integrity sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q== - -JSV@^4.0.x: - version "4.0.2" - resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" - integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - -accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -adm-zip@^0.4.9: - version "0.4.13" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" - integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -agent-base@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -anchor-markdown-header@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" - integrity sha1-BFBj125qH5zTJ6V6ASaqD97Dcac= - dependencies: - emoji-regex "~6.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.2, argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -arrify@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -async-each@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" - integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -async@0.2.x, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= - -async@1.x, async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -async@^2.6.0, async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== - dependencies: - lodash "^4.17.11" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== - -babel-runtime@^6.9.2: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@^6.8.1: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -basic-auth@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -blocking-proxy@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" - integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== - dependencies: - minimist "^1.2.0" - -bluebird@^3.3.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== - -body-parser@^1.16.1: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" - on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" - -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - -boundary@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" - integrity sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browserstack@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" - integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== - dependencies: - https-proxy-agent "^2.2.1" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== - -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== - -chokidar@^2.0.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" - integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== - dependencies: - source-map "~0.6.0" - -cli-table@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= - dependencies: - colors "1.0.3" - -cli@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" - integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= - dependencies: - exit "0.1.2" - glob "^7.1.1" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" - integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -coffeescript@~1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" - integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= - -collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colors@0.6.x: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -colors@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== - -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== - dependencies: - delayed-stream "~1.0.0" - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= - dependencies: - graceful-readlink ">= 1.0.0" - -comment-parser@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.2.tgz#3c03f0776b86a36dfd9a0a2c97c6307f332082fe" - integrity sha1-PAPwd2uGo239mgosl8YwfzMggv4= - dependencies: - readable-stream "^2.0.4" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1, component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -components-jqueryui@1.12.1: - version "1.12.1" - resolved "https://registry.yarnpkg.com/components-jqueryui/-/components-jqueryui-1.12.1.tgz#617076f128f3be4c265f3e2db50471ef96cd9cee" - integrity sha1-YXB28SjzvkwmXz4ttQRx75bNnO4= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-livereload@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.6.1.tgz#1ac0c8bb9d9cfd5b28b629987a56a9239db9baaa" - integrity sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g== - -connect@^3.6.0, connect@^3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - -console-browserify@1.1.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= - -convert-source-map@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js@^2.2.0, core-js@^2.4.0: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== - -core-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" - integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -coveralls@^3.0.3, coveralls@~3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" - integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== - dependencies: - growl "~> 1.10.0" - js-yaml "^3.11.0" - lcov-parse "^0.0.10" - log-driver "^1.2.7" - minimist "^1.2.0" - request "^2.86.0" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cst@^0.4.3: - version "0.4.10" - resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" - integrity sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag== - dependencies: - babel-runtime "^6.9.2" - babylon "^6.8.1" - source-map-support "^0.4.0" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -date-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" - integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= - -dateformat@^1.0.6, dateformat@~1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - -debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-equal@*: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= - -doctoc@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" - integrity sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg== - dependencies: - "@textlint/markdown-to-ast" "~6.0.9" - anchor-markdown-header "^0.5.5" - htmlparser2 "~3.9.2" - minimist "~1.2.0" - underscore "~1.8.3" - update-section "^0.3.0" - -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= - dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" - -dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duplexify@^3.6.0, duplexify@^3.6.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -each-async@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" - integrity sha1-3uUim98KtrogEqOV4bhpq/iBNHM= - dependencies: - onetime "^1.0.0" - set-immediate-shim "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emoji-regex@~6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" - integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI= - -encodeurl@~1.0.1, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" - integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= - dependencies: - string-template "~0.2.1" - xtend "~4.0.0" - -es6-promise@^4.0.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - -estraverse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter2@~0.4.13: - version "0.4.14" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" - integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= - -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== - -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= - -exit@0.1.2, exit@0.1.x, exit@^0.1.2, exit@~0.1.1, exit@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^1.6.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= - dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fault@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" - integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== - dependencies: - format "^0.2.2" - -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - -figures@^1.0.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-sync-cmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" - integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs= - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -findup-sync@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" - integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= - dependencies: - glob "~5.0.0" - -fined@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" - integrity sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g== - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" - integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== - -flatted@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" - integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== - dependencies: - debug "^3.2.6" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -format@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-access@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" - integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= - dependencies: - null-check "^1.0.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== - dependencies: - minipass "^2.2.1" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" - integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0, gaze@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getobject@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" - integrity sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob@^5.0.1, glob@^5.0.15, glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= - -"growl@~> 1.10.0": - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -grunt-cli@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.3.2.tgz#60f12d12c1b5aae94ae3469c6b5fe24e960014e8" - integrity sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ== - dependencies: - grunt-known-options "~1.1.0" - interpret "~1.1.0" - liftoff "~2.5.0" - nopt "~4.0.1" - v8flags "~3.1.1" - -grunt-cli@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" - integrity sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg= - dependencies: - findup-sync "~0.3.0" - grunt-known-options "~1.1.0" - nopt "~3.0.6" - resolve "~1.1.0" - -grunt-contrib-connect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz#7ee86838f351f72c12186143ebc60823d8d524dd" - integrity sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA== - dependencies: - async "^2.6.1" - connect "^3.6.6" - connect-livereload "^0.6.0" - morgan "^1.9.0" - node-http2 "^4.0.1" - opn "^5.3.0" - portscanner "^2.2.0" - serve-index "^1.9.1" - serve-static "^1.13.2" - -grunt-contrib-copy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz#7060c6581e904b8ab0d00f076e0a8f6e3e7c3573" - integrity sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM= - dependencies: - chalk "^1.1.1" - file-sync-cmp "^0.1.0" - -grunt-contrib-cssmin@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-3.0.0.tgz#1767c0a062f4b7353c5adcadc52dcff7197d4d89" - integrity sha512-eXpooYmVGKMs/xV7DzTLgJFPVOfMuawPD3x0JwhlH0mumq2NtH3xsxaHxp1Y3NKxp0j0tRhFS6kSBRsz6TuTGg== - dependencies: - chalk "^2.4.1" - clean-css "~4.2.1" - maxmin "^2.1.0" - -grunt-contrib-jshint@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-jshint/-/grunt-contrib-jshint-2.1.0.tgz#3d789807579034299da1b41c4d70e1ba722973ed" - integrity sha512-65S2/C/6RfjY/umTxfwXXn+wVvaYmykHkHSsW6Q6rhkbv3oudTEgqnFFZvWzWCoHUb+3GMZLbP3oSrNyvshmIQ== - dependencies: - chalk "^2.4.2" - hooker "^0.2.3" - jshint "~2.10.2" - -grunt-contrib-uglify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz#68a7b62fa045ce8e2c7574d1bdcd3b96b8a686b1" - integrity sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg== - dependencies: - chalk "^2.4.1" - maxmin "^2.1.0" - uglify-js "^3.5.0" - uri-path "^1.0.0" - -grunt-contrib-watch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4" - integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== - dependencies: - async "^2.6.0" - gaze "^1.1.0" - lodash "^4.17.10" - tiny-lr "^1.1.1" - -grunt-jscs@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/grunt-jscs/-/grunt-jscs-3.0.1.tgz#1fae50e3e955df9e3a9d9425aec22accae008092" - integrity sha1-H65Q4+lV3546nZQlrsIqzK4AgJI= - dependencies: - hooker "~0.2.3" - jscs "~3.0.5" - lodash "~4.6.1" - vow "~0.4.1" - -grunt-known-options@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" - integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== - -grunt-legacy-log-utils@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" - integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== - dependencies: - chalk "~2.4.1" - lodash "~4.17.10" - -grunt-legacy-log@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" - integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== - dependencies: - colors "~1.1.2" - grunt-legacy-log-utils "~2.0.0" - hooker "~0.2.3" - lodash "~4.17.5" - -grunt-legacy-util@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" - integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== - dependencies: - async "~1.5.2" - exit "~0.1.1" - getobject "~0.1.0" - hooker "~0.2.3" - lodash "~4.17.10" - underscore.string "~3.3.4" - which "~1.3.0" - -grunt-protractor-runner@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/grunt-protractor-runner/-/grunt-protractor-runner-5.0.0.tgz#862d43c2ba0f82ad9364e861dc4aa79b0e6426c1" - integrity sha1-hi1DwroPgq2TZOhh3Eqnmw5kJsE= - dependencies: - protractor "^5.0.0" - split "~1.0.0" - through2 "~2.0.0" - -grunt-protractor-webdriver@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/grunt-protractor-webdriver/-/grunt-protractor-webdriver-0.2.5.tgz#bd6808b257013c0e6137e86847ee67c322bff65f" - integrity sha1-vWgIslcBPA5hN+hoR+5nwyK/9l8= - dependencies: - split "^1.0.0" - -grunt-sass@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-2.1.0.tgz#b7ba1d85ef4c2d9b7d8195fe65f664ac7554efa1" - integrity sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA== - dependencies: - each-async "^1.0.0" - node-sass "^4.7.2" - object-assign "^4.0.1" - -grunt@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.4.tgz#c799883945a53a3d07622e0737c8f70bfe19eb38" - integrity sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ== - dependencies: - coffeescript "~1.10.0" - dateformat "~1.0.12" - eventemitter2 "~0.4.13" - exit "~0.1.1" - findup-sync "~0.3.0" - glob "~7.0.0" - grunt-cli "~1.2.0" - grunt-known-options "~1.1.0" - grunt-legacy-log "~2.0.0" - grunt-legacy-util "~1.1.1" - iconv-lite "~0.4.13" - js-yaml "~3.13.0" - minimatch "~3.0.2" - mkdirp "~0.5.1" - nopt "~3.0.6" - path-is-absolute "~1.0.0" - rimraf "~2.6.2" - -gzip-size@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" - integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= - dependencies: - duplexer "^0.1.1" - -handlebars@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" - integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.0: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hooker@^0.2.3, hooker@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" - integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk= - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -htmlparser2@3.8.3, htmlparser2@3.8.x: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - -htmlparser2@~3.9.2: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== - -http-proxy@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== - dependencies: - eventemitter3 "^3.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" - integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= - -https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -i@0.3.x: - version "0.3.6" - resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" - integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherit@^2.2.2: - version "2.2.7" - resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" - integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -interpret@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== - -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - -is-number-like@^1.0.3: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" - integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== - dependencies: - lodash.isfinite "^3.3.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - -is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -isbinaryfile@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@0.1.x, isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul@^0.4.0: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -jasmine-core@^3.3, jasmine-core@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.3.0.tgz#dea1cdc634bc93c7e0d4ad27185df30fa971b10e" - integrity sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA== - -jasmine-core@~2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" - integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= - -jasmine@2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" - integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= - dependencies: - exit "^0.1.2" - glob "^7.0.6" - jasmine-core "~2.8.0" - -jasminewd2@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" - integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= - -jquery-ui@^1.12.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" - integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= - -jquery@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca" - integrity sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg== - -js-base64@^2.1.8: - version "2.5.1" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" - integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== - -js-yaml@3.x, js-yaml@^3.11.0, js-yaml@~3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" - integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.4.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" - integrity sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA= - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - inherit "^2.2.2" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jscs-jsdoc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" - integrity sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE= - dependencies: - comment-parser "^0.3.1" - jsdoctypeparser "~1.2.0" - -jscs-preset-wikimedia@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz#a6a5fa5967fd67a5d609038e1c794eaf41d4233d" - integrity sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA== - -jscs@~3.0.5: - version "3.0.7" - resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.7.tgz#7141b4dff5b86e32d0e99d764b836767c30d201a" - integrity sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo= - dependencies: - chalk "~1.1.0" - cli-table "~0.3.1" - commander "~2.9.0" - cst "^0.4.3" - estraverse "^4.1.0" - exit "~0.1.2" - glob "^5.0.1" - htmlparser2 "3.8.3" - js-yaml "~3.4.0" - jscs-jsdoc "^2.0.0" - jscs-preset-wikimedia "~1.0.0" - jsonlint "~1.6.2" - lodash "~3.10.0" - minimatch "~3.0.0" - natural-compare "~1.2.2" - pathval "~0.1.1" - prompt "~0.2.14" - reserved-words "^0.1.1" - resolve "^1.1.6" - strip-bom "^2.0.0" - strip-json-comments "~1.0.2" - to-double-quotes "^2.0.0" - to-single-quotes "^2.0.0" - vow "~0.4.8" - vow-fs "~0.3.4" - xmlbuilder "^3.1.0" - -jsdoctypeparser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" - integrity sha1-597cFToRhJ/8UUEUSuhqfvDCU5I= - dependencies: - lodash "^3.7.0" - -jshint@~2.10.2: - version "2.10.2" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.2.tgz#ed6626c4f8223c98e94aaea62767435427a49a3d" - integrity sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA== - dependencies: - cli "~1.0.0" - console-browserify "1.1.x" - exit "0.1.x" - htmlparser2 "3.8.x" - lodash "~4.17.11" - minimatch "~3.0.2" - shelljs "0.3.x" - strip-json-comments "1.0.x" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonlint@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" - integrity sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A== - dependencies: - JSV "^4.0.x" - nomnom "^1.5.x" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jszip@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.1.tgz#c5d32df7274042282b157efb16e522b43435e01a" - integrity sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -karma-chrome-launcher@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" - integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== - dependencies: - fs-access "^1.0.0" - which "^1.2.1" - -karma-coverage@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" - integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - lodash "^4.17.0" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-coveralls@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/karma-coveralls/-/karma-coveralls-2.1.0.tgz#b0fde853d0a7f35c5db8c8e56706b760f1069e2c" - integrity sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw== - dependencies: - coveralls "~3.0.0" - lcov-result-merger "^3.0.0" - through2 "^2.0.0" - vinyl-fs "^3.0.2" - -karma-jasmine@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" - integrity sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA== - dependencies: - jasmine-core "^3.3" - -karma@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.1.tgz#2581d6caa0d4cd28b65131561b47bad6d5478773" - integrity sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A== - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - braces "^2.3.2" - chokidar "^2.0.3" - colors "^1.1.0" - connect "^3.6.0" - core-js "^2.2.0" - di "^0.0.1" - dom-serialize "^2.2.0" - flatted "^2.0.0" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.11" - log4js "^4.0.0" - mime "^2.3.1" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.1.1" - source-map "^0.6.1" - tmp "0.0.33" - useragent "2.3.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcov-parse@^0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= - -lcov-result-merger@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz#ae6d1be663dbf7d586d8004642359d39de72039e" - integrity sha512-vGXaMNGZRr4cYvW+xMVg+rg7qd5DX9SbGXl+0S3k85+gRZVK4K7UvxPWzKb/qiMwe+4bx3EOrW2o4mbdb1WnsA== - dependencies: - through2 "^2.0.3" - vinyl "^2.1.0" - vinyl-fs "^3.0.2" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -liftoff@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= - dependencies: - extend "^3.0.0" - findup-sync "^2.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - -livereload-js@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" - integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.isfinite@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" - integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= - -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== - -lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - -lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -lodash@~4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.6.1.tgz#df00c1164ad236b183cfc3887a5e8d38cc63cbbc" - integrity sha1-3wDBFkrSNrGDz8OIel6NOMxjy7w= - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -log4js@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.0.tgz#57983c6a443546a8c8607e9cb045d2a117c27644" - integrity sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA== - dependencies: - date-format "^2.0.0" - debug "^4.1.1" - flatted "^2.0.0" - rfdc "^1.1.2" - streamroller "^1.0.4" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@4.1.x, lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== - dependencies: - kind-of "^6.0.2" - -map-cache@^0.2.0, map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== - -maxmin@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" - integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= - dependencies: - chalk "^1.0.0" - figures "^1.0.1" - gzip-size "^3.0.0" - pretty-bytes "^3.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -meow@^3.3.0, meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== - dependencies: - mime-db "~1.38.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - -mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -morgan@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== - dependencies: - basic-auth "~2.0.0" - debug "2.6.9" - depd "~1.1.2" - on-finished "~2.3.0" - on-headers "~1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.10.0, nan@^2.9.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@~1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" - integrity sha1-H5bWDjFBysG20FZTzg2urHY69qo= - -ncp@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" - integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= - -needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= - -neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-http2@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/node-http2/-/node-http2-4.0.1.tgz#164ff53b5dd22c84f0af142b877c5eaeb6809959" - integrity sha1-Fk/1O13SLITwrxQrh3xerraAmVk= - dependencies: - assert "1.4.1" - events "1.1.1" - https-browserify "0.0.1" - setimmediate "^1.0.5" - stream-browserify "2.0.1" - timers-browserify "2.0.2" - url "^0.11.0" - websocket-stream "^5.0.1" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-sass@^4.7.2: - version "4.11.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" - integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.10.0" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -nomnom@^1.5.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - -"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -nopt@^4.0.1, nopt@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -now-and-later@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" - integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= - dependencies: - once "^1.3.2" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -null-check@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" - integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.pick@^1.2.0, object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= - -opn@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1, optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -pako@~1.0.2: - version "1.0.10" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" - integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== - -parse-entities@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" - integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pathval@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" - integrity sha1-CPkRzcqczllCiA2ngXvAtyO2bYI= - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkginfo@0.3.x: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= - -pkginfo@0.x.x: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= - -portscanner@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" - integrity sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw== - dependencies: - async "^2.6.0" - is-number-like "^1.0.3" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -pretty-bytes@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" - integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= - dependencies: - number-is-nan "^1.0.0" - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -progress@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prompt@~0.2.14: - version "0.2.14" - resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" - integrity sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w= - dependencies: - pkginfo "0.x.x" - read "1.0.x" - revalidator "0.1.x" - utile "0.2.x" - winston "0.8.x" - -protractor@^5.0.0: - version "5.4.2" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" - integrity sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA== - dependencies: - "@types/q" "^0.0.32" - "@types/selenium-webdriver" "^3.0.0" - blocking-proxy "^1.0.0" - browserstack "^1.5.1" - chalk "^1.1.3" - glob "^7.0.3" - jasmine "2.8.0" - jasminewd2 "^2.1.0" - optimist "~0.6.0" - q "1.4.1" - saucelabs "^1.5.0" - selenium-webdriver "3.6.0" - source-map-support "~0.4.0" - webdriver-js-extender "2.1.0" - webdriver-manager "^12.0.6" - -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.24: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -puppeteer@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.13.0.tgz#187ccf5ed5caf08ed1291b262d033cc364bf88ab" - integrity sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ== - dependencies: - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^2.2.1" - mime "^2.0.3" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - -q@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= - -q@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qjobs@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.5.2, qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -qs@^6.4.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -range-parser@^1.2.0, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= - -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -raw-body@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" - integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= - dependencies: - bytes "1" - string_decoder "0.10" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read@1.0.x: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= - dependencies: - mute-stream "~0.0.4" - -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" - integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remark-frontmatter@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz#bc28c0c913fa0b9dd26f17304bc47b856b2ea2de" - integrity sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A== - dependencies: - fault "^1.0.1" - xtend "^4.0.1" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -replace-ext@1.0.0, replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -request@^2.86.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reserved-words@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.x, resolve@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== - dependencies: - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -revalidator@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" - integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= - -rfdc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" - integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== - -rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-json-parse@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" - integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -saucelabs@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" - integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== - dependencies: - https-proxy-agent "^2.2.1" - -sax@>=0.6.0, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" - integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== - dependencies: - jszip "^3.1.3" - rimraf "^2.5.4" - tmp "0.0.30" - xml2js "^0.4.17" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@^1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@^1.0.0, set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4, setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -shelljs@0.3.x: - version "0.3.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" - integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= - -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" - to-array "0.1.4" - -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== - dependencies: - debug "~3.1.0" - engine.io "~3.2.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.0, source-map-support@~0.4.0: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.1, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" - integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split@^1.0.0, split@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= - -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - -stream-browserify@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= - -streamroller@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.4.tgz#d485c7624796d5e2eb34190c79afcbf006afb5e6" - integrity sha512-Wc2Gm5ygjSX8ZpW9J7Y9FwiSzTlKSvcl0FTTMd3rn7RoxDXpBW+xD9TY5sWL2n0UR61COB0LG1BQvN6nTUQbLQ== - dependencies: - async "^2.6.1" - date-format "^2.0.0" - debug "^3.1.0" - fs-extra "^7.0.0" - lodash "^4.17.10" - -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@0.10, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@1.0.x, strip-json-comments@~1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -structured-source@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" - integrity sha1-3YAkJeD1PcSm56yjdSkBoczaevU= - dependencies: - boundary "^1.0.1" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-browserify@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" - integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y= - dependencies: - setimmediate "^1.0.4" - -tiny-lr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" - integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== - dependencies: - body "^5.1.0" - debug "^3.1.0" - faye-websocket "~0.10.0" - livereload-js "^2.3.0" - object-assign "^4.1.0" - qs "^6.4.0" - -tmp@0.0.30: - version "0.0.30" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" - integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= - dependencies: - os-tmpdir "~1.0.1" - -tmp@0.0.33, tmp@0.0.x: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -to-double-quotes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" - integrity sha1-qvIx1vqUiUn4GTAburRITYWI5Kc= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-single-quotes@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" - integrity sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU= - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -uglify-js@^3.1.4, uglify-js@^3.5.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.2.tgz#dc0c7ac2da0a4b7d15e84266818ff30e82529474" - integrity sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -underscore.string@~3.3.4: - version "3.3.5" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" - integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== - dependencies: - sprintf-js "^1.0.3" - util-deprecate "^1.0.2" - -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= - -underscore@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= - -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" - -unified@^6.1.6: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== - dependencies: - unist-util-is "^2.1.2" - -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== - -update-section@^0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" - integrity sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg= - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -uri-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32" - integrity sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI= - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -useragent@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -utile@0.2.x: - version "0.2.1" - resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" - integrity sha1-kwyI6ZCY1iIINMNWy9mncFItkNc= - dependencies: - async "~0.2.9" - deep-equal "*" - i "0.3.x" - mkdirp "0.x.x" - ncp "0.4.x" - rimraf "2.x.x" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= - -uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== - -v8flags@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.2.tgz#fc5cd0c227428181e6c29b2992e4f8f1da5e0c9f" - integrity sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw== - dependencies: - homedir-polyfill "^1.0.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vinyl-fs@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0, vinyl@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -vow-fs@~0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" - integrity sha1-LUxZviLivyYY3fWXq0uqkjvnIA0= - dependencies: - glob "^7.0.5" - uuid "^2.0.2" - vow "^0.4.7" - vow-queue "^0.4.1" - -vow-queue@^0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.3.tgz#4ba8f64b56e9212c0dbe57f1405aeebd54cce78d" - integrity sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw== - dependencies: - vow "^0.4.17" - -vow@^0.4.17, vow@^0.4.7, vow@~0.4.1, vow@~0.4.8: - version "0.4.19" - resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.19.tgz#cc5ef4d6bb6972d830830a7c9ecf8ad834a7c525" - integrity sha512-S+0+CiQlbUhTNWMlJdqo/ARuXOttXdvw5ACGyh1W97NFHUdwt3Fzyaus03Kvdmo733dwnYS9AGJSDg0Zu8mNfA== - -webdriver-js-extender@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" - integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== - dependencies: - "@types/selenium-webdriver" "^3.0.0" - selenium-webdriver "^3.0.1" - -webdriver-manager@^12.0.6: - version "12.1.1" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.1.tgz#66c3271f69cefdaa9fdfca617ae95afae41c3c62" - integrity sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA== - dependencies: - adm-zip "^0.4.9" - chalk "^1.1.1" - del "^2.2.0" - glob "^7.0.3" - ini "^1.3.4" - minimist "^1.2.0" - q "^1.4.1" - request "^2.87.0" - rimraf "^2.5.2" - semver "^5.3.0" - xml2js "^0.4.17" - -websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= - dependencies: - http-parser-js ">=0.4.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== - -websocket-stream@^5.0.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.3.0.tgz#aeeb2919c437133082c915ab74d21ec7849dd618" - integrity sha512-L4kN0NYwZJc0q7QKVHyjS7oNx2TuLyx6P2RDVJwejuKRYklU72FwLMRmQP/1UEYwNVTJgjBtNpde4NvqeyswLQ== - dependencies: - duplexify "^3.6.1" - inherits "^2.0.1" - readable-stream "^3.0.0" - safe-buffer "^5.1.2" - ws "^6.1.2" - xtend "^4.0.0" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -winston@0.8.x: - version "0.8.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" - integrity sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA= - dependencies: - async "0.2.x" - colors "0.6.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - pkginfo "0.3.x" - stack-trace "0.0.x" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^6.1.0, ws@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xml2js@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xmlbuilder@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" - integrity sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE= - dependencies: - lodash "^3.5.0" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= - -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@textlint/ast-node-types@^4.0.3": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.1.tgz#978fa10e23468114462fc08ef29f96980c12a8ef" + integrity sha512-Pqg1LTJpF929Ovi/lCaPqlyz8yDwBFbQulC0jyQcbRAoTxYS4AZMc48Ug2yk0so5hISQXKrlAxyVBmBVl9EKGA== + +"@textlint/markdown-to-ast@~6.0.9": + version "6.0.9" + resolved "https://registry.yarnpkg.com/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz#e7c89e5ad15d17dcd8e5a62758358936827658fa" + integrity sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ== + dependencies: + "@textlint/ast-node-types" "^4.0.3" + debug "^2.1.3" + remark-frontmatter "^1.2.0" + remark-parse "^5.0.0" + structured-source "^3.0.2" + traverse "^0.6.6" + unified "^6.1.6" + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/selenium-webdriver@^3.0.0": + version "3.0.15" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz#024c24051c3798e9a0cf5cceb1c893140df1bc31" + integrity sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q== + +JSV@^4.0.x: + version "4.0.2" + resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" + integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + +accepts@~1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +adm-zip@^0.4.9: + version "0.4.13" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.13.tgz#597e2f8cc3672151e1307d3e95cddbc75672314a" + integrity sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + +ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + +anchor-markdown-header@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz#045063d76e6a1f9cd327a57a0126aa0fdec371a7" + integrity sha1-BFBj125qH5zTJ6V6ASaqD97Dcac= + dependencies: + emoji-regex "~6.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= + dependencies: + buffer-equal "^1.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.2, argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-slice@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" + integrity sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w== + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" + integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + +async@0.2.x, async@~0.2.9: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= + +async@1.x, async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.6.0, async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-runtime@^6.9.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.8.1: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +bail@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" + integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +basic-auth@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +bluebird@^3.3.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + +body-parser@^1.16.1: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +body@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= + dependencies: + continuable-cache "^0.3.1" + error "^7.0.0" + raw-body "~1.1.0" + safe-json-parse "~1.0.1" + +boundary@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" + integrity sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +browserstack@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" + integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== + dependencies: + https-proxy-agent "^2.2.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +bytes@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" + integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== + +character-entities@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" + integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== + +character-reference-invalid@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" + integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== + +chokidar@^2.0.3: + version "2.1.5" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" + integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +cli-table@~0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM= + dependencies: + colors "1.0.3" + +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + integrity sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ= + dependencies: + exit "0.1.2" + glob "^7.1.1" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= + +clone-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +cloneable-readable@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +coffeescript@~1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" + integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= + +collapse-white-space@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colors@0.6.x: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= + +colors@^1.1.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + +commander@~2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== + +commander@~2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q= + dependencies: + graceful-readlink ">= 1.0.0" + +comment-parser@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.2.tgz#3c03f0776b86a36dfd9a0a2c97c6307f332082fe" + integrity sha1-PAPwd2uGo239mgosl8YwfzMggv4= + dependencies: + readable-stream "^2.0.4" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1, component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +components-jqueryui@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/components-jqueryui/-/components-jqueryui-1.12.1.tgz#617076f128f3be4c265f3e2db50471ef96cd9cee" + integrity sha1-YXB28SjzvkwmXz4ttQRx75bNnO4= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-livereload@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.6.1.tgz#1ac0c8bb9d9cfd5b28b629987a56a9239db9baaa" + integrity sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g== + +connect@^3.6.0, connect@^3.6.6: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +console-browserify@1.1.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +continuable-cache@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= + +convert-source-map@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js@^2.2.0, core-js@^2.4.0: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" + integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +coveralls@^3.0.3, coveralls@~3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" + integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== + dependencies: + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.86.0" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cst@^0.4.3: + version "0.4.10" + resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" + integrity sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag== + dependencies: + babel-runtime "^6.9.2" + babylon "^6.8.1" + source-map-support "^0.4.0" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +cycle@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" + integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" + integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +dateformat@^1.0.6, dateformat@~1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@*: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +doctoc@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" + integrity sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg== + dependencies: + "@textlint/markdown-to-ast" "~6.0.9" + anchor-markdown-header "^0.5.5" + htmlparser2 "~3.9.2" + minimist "~1.2.0" + underscore "~1.8.3" + update-section "^0.3.0" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.6.0, duplexify@^3.6.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +each-async@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473" + integrity sha1-3uUim98KtrogEqOV4bhpq/iBNHM= + dependencies: + onetime "^1.0.0" + set-immediate-shim "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +emoji-regex@~6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" + integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI= + +encodeurl@~1.0.1, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + +es6-promise@^4.0.3: + version "4.2.6" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" + integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + +estraverse@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eventemitter2@~0.4.13: + version "0.4.14" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" + integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= + +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +exit@0.1.2, exit@0.1.x, exit@^0.1.2, exit@~0.1.1, exit@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-zip@^1.6.6: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +eyes@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fault@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" + integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== + dependencies: + format "^0.2.2" + +faye-websocket@~0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +figures@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-sync-cmp@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" + integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs= + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +findup-sync@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" + integrity sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY= + dependencies: + glob "~5.0.0" + +fined@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" + integrity sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g== + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + +flush-write-stream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" + integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + dependencies: + debug "^3.2.6" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + integrity sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +format@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + integrity sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o= + dependencies: + null-check "^1.0.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + dependencies: + minipass "^2.2.1" + +fs-mkdirp-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= + dependencies: + graceful-fs "^4.1.11" + through2 "^2.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gaze@^1.0.0, gaze@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" + integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== + dependencies: + globule "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getobject@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/getobject/-/getobject-0.1.0.tgz#047a449789fa160d018f5486ed91320b6ec7885c" + integrity sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-stream@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= + dependencies: + extend "^3.0.0" + glob "^7.1.1" + glob-parent "^3.1.0" + is-negated-glob "^1.0.0" + ordered-read-streams "^1.0.0" + pumpify "^1.3.5" + readable-stream "^2.1.5" + remove-trailing-separator "^1.0.1" + to-absolute-glob "^2.0.0" + unique-stream "^2.0.2" + +glob@^5.0.1, glob@^5.0.15, glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~7.0.0: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globule@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" + integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ== + dependencies: + glob "~7.1.1" + lodash "~4.17.10" + minimatch "~3.0.2" + +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +grunt-cli@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.3.2.tgz#60f12d12c1b5aae94ae3469c6b5fe24e960014e8" + integrity sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ== + dependencies: + grunt-known-options "~1.1.0" + interpret "~1.1.0" + liftoff "~2.5.0" + nopt "~4.0.1" + v8flags "~3.1.1" + +grunt-cli@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" + integrity sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg= + dependencies: + findup-sync "~0.3.0" + grunt-known-options "~1.1.0" + nopt "~3.0.6" + resolve "~1.1.0" + +grunt-contrib-connect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz#7ee86838f351f72c12186143ebc60823d8d524dd" + integrity sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA== + dependencies: + async "^2.6.1" + connect "^3.6.6" + connect-livereload "^0.6.0" + morgan "^1.9.0" + node-http2 "^4.0.1" + opn "^5.3.0" + portscanner "^2.2.0" + serve-index "^1.9.1" + serve-static "^1.13.2" + +grunt-contrib-copy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz#7060c6581e904b8ab0d00f076e0a8f6e3e7c3573" + integrity sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM= + dependencies: + chalk "^1.1.1" + file-sync-cmp "^0.1.0" + +grunt-contrib-cssmin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-cssmin/-/grunt-contrib-cssmin-3.0.0.tgz#1767c0a062f4b7353c5adcadc52dcff7197d4d89" + integrity sha512-eXpooYmVGKMs/xV7DzTLgJFPVOfMuawPD3x0JwhlH0mumq2NtH3xsxaHxp1Y3NKxp0j0tRhFS6kSBRsz6TuTGg== + dependencies: + chalk "^2.4.1" + clean-css "~4.2.1" + maxmin "^2.1.0" + +grunt-contrib-jshint@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-jshint/-/grunt-contrib-jshint-2.1.0.tgz#3d789807579034299da1b41c4d70e1ba722973ed" + integrity sha512-65S2/C/6RfjY/umTxfwXXn+wVvaYmykHkHSsW6Q6rhkbv3oudTEgqnFFZvWzWCoHUb+3GMZLbP3oSrNyvshmIQ== + dependencies: + chalk "^2.4.2" + hooker "^0.2.3" + jshint "~2.10.2" + +grunt-contrib-uglify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz#68a7b62fa045ce8e2c7574d1bdcd3b96b8a686b1" + integrity sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg== + dependencies: + chalk "^2.4.1" + maxmin "^2.1.0" + uglify-js "^3.5.0" + uri-path "^1.0.0" + +grunt-contrib-watch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz#c143ca5b824b288a024b856639a5345aedb78ed4" + integrity sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg== + dependencies: + async "^2.6.0" + gaze "^1.1.0" + lodash "^4.17.10" + tiny-lr "^1.1.1" + +grunt-jscs@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/grunt-jscs/-/grunt-jscs-3.0.1.tgz#1fae50e3e955df9e3a9d9425aec22accae008092" + integrity sha1-H65Q4+lV3546nZQlrsIqzK4AgJI= + dependencies: + hooker "~0.2.3" + jscs "~3.0.5" + lodash "~4.6.1" + vow "~0.4.1" + +grunt-known-options@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" + integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== + +grunt-legacy-log-utils@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" + integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== + dependencies: + chalk "~2.4.1" + lodash "~4.17.10" + +grunt-legacy-log@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" + integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== + dependencies: + colors "~1.1.2" + grunt-legacy-log-utils "~2.0.0" + hooker "~0.2.3" + lodash "~4.17.5" + +grunt-legacy-util@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" + integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== + dependencies: + async "~1.5.2" + exit "~0.1.1" + getobject "~0.1.0" + hooker "~0.2.3" + lodash "~4.17.10" + underscore.string "~3.3.4" + which "~1.3.0" + +grunt-protractor-runner@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/grunt-protractor-runner/-/grunt-protractor-runner-5.0.0.tgz#862d43c2ba0f82ad9364e861dc4aa79b0e6426c1" + integrity sha1-hi1DwroPgq2TZOhh3Eqnmw5kJsE= + dependencies: + protractor "^5.0.0" + split "~1.0.0" + through2 "~2.0.0" + +grunt-protractor-webdriver@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/grunt-protractor-webdriver/-/grunt-protractor-webdriver-0.2.5.tgz#bd6808b257013c0e6137e86847ee67c322bff65f" + integrity sha1-vWgIslcBPA5hN+hoR+5nwyK/9l8= + dependencies: + split "^1.0.0" + +grunt-sass@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-sass/-/grunt-sass-2.1.0.tgz#b7ba1d85ef4c2d9b7d8195fe65f664ac7554efa1" + integrity sha512-XkexnQt/9rhReNd+Y7T0n/2g5FqYOQKfi2iSlpwDqvgs7EgEaGTxNhnWzHnbW5oNRvzL9AHopBG3AgRxL0d+DA== + dependencies: + each-async "^1.0.0" + node-sass "^4.7.2" + object-assign "^4.0.1" + +grunt@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.4.tgz#c799883945a53a3d07622e0737c8f70bfe19eb38" + integrity sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ== + dependencies: + coffeescript "~1.10.0" + dateformat "~1.0.12" + eventemitter2 "~0.4.13" + exit "~0.1.1" + findup-sync "~0.3.0" + glob "~7.0.0" + grunt-cli "~1.2.0" + grunt-known-options "~1.1.0" + grunt-legacy-log "~2.0.0" + grunt-legacy-util "~1.1.1" + iconv-lite "~0.4.13" + js-yaml "~3.13.0" + minimatch "~3.0.2" + mkdirp "~0.5.1" + nopt "~3.0.6" + path-is-absolute "~1.0.0" + rimraf "~2.6.2" + +gzip-size@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + +handlebars@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" + integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== + dependencies: + neo-async "^2.6.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hooker@^0.2.3, hooker@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/hooker/-/hooker-0.2.3.tgz#b834f723cc4a242aa65963459df6d984c5d3d959" + integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk= + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + +htmlparser2@3.8.3, htmlparser2@3.8.x: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +htmlparser2@~3.9.2: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" + integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== + +http-proxy@^1.13.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + dependencies: + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= + +https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + +i@0.3.x: + version "0.3.6" + resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" + integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.4, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherit@^2.2.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" + integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +interpret@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== + dependencies: + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" + integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== + +is-alphanumerical@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" + integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.4, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-decimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== + +is-negated-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= + +is-number-like@^1.0.3: + version "1.0.8" + resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" + integrity sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA== + dependencies: + lodash.isfinite "^3.3.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-utf8@^0.2.0, is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-valid-glob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= + +is-whitespace-character@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" + integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" + integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@0.1.x, isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +jasmine-core@^3.3, jasmine-core@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.3.0.tgz#dea1cdc634bc93c7e0d4ad27185df30fa971b10e" + integrity sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA== + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +jquery-ui@^1.12.0: + version "1.12.1" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.12.1.tgz#bcb4045c8dd0539c134bc1488cdd3e768a7a9e51" + integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= + +jquery@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.0.tgz#8de513fa0fa4b2c7d2e48a530e26f0596936efdf" + integrity sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ== + +js-base64@^2.1.8: + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" + integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== + +js-yaml@3.x, js-yaml@^3.11.0, js-yaml@~3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" + integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.4.0: + version "3.4.6" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" + integrity sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA= + dependencies: + argparse "^1.0.2" + esprima "^2.6.0" + inherit "^2.2.2" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jscs-jsdoc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" + integrity sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE= + dependencies: + comment-parser "^0.3.1" + jsdoctypeparser "~1.2.0" + +jscs-preset-wikimedia@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz#a6a5fa5967fd67a5d609038e1c794eaf41d4233d" + integrity sha512-RWqu6IYSUlnYuCRCF0obCOHjJV0vhpLcvKbauwxmLQoZ0PiXDTWBYlfpsEfdhg7pmREAEwrARfDRz5qWD6qknA== + +jscs@~3.0.5: + version "3.0.7" + resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.7.tgz#7141b4dff5b86e32d0e99d764b836767c30d201a" + integrity sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo= + dependencies: + chalk "~1.1.0" + cli-table "~0.3.1" + commander "~2.9.0" + cst "^0.4.3" + estraverse "^4.1.0" + exit "~0.1.2" + glob "^5.0.1" + htmlparser2 "3.8.3" + js-yaml "~3.4.0" + jscs-jsdoc "^2.0.0" + jscs-preset-wikimedia "~1.0.0" + jsonlint "~1.6.2" + lodash "~3.10.0" + minimatch "~3.0.0" + natural-compare "~1.2.2" + pathval "~0.1.1" + prompt "~0.2.14" + reserved-words "^0.1.1" + resolve "^1.1.6" + strip-bom "^2.0.0" + strip-json-comments "~1.0.2" + to-double-quotes "^2.0.0" + to-single-quotes "^2.0.0" + vow "~0.4.8" + vow-fs "~0.3.4" + xmlbuilder "^3.1.0" + +jsdoctypeparser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" + integrity sha1-597cFToRhJ/8UUEUSuhqfvDCU5I= + dependencies: + lodash "^3.7.0" + +jshint@~2.10.2: + version "2.10.2" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.2.tgz#ed6626c4f8223c98e94aaea62767435427a49a3d" + integrity sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA== + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "~4.17.11" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonlint@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" + integrity sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A== + dependencies: + JSV "^4.0.x" + nomnom "^1.5.x" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.1.tgz#c5d32df7274042282b157efb16e522b43435e01a" + integrity sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + integrity sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w== + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-coverage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" + integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^4.17.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-coveralls@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/karma-coveralls/-/karma-coveralls-2.1.0.tgz#b0fde853d0a7f35c5db8c8e56706b760f1069e2c" + integrity sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw== + dependencies: + coveralls "~3.0.0" + lcov-result-merger "^3.0.0" + through2 "^2.0.0" + vinyl-fs "^3.0.2" + +karma-jasmine@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-2.0.1.tgz#26e3e31f2faf272dd80ebb0e1898914cc3a19763" + integrity sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA== + dependencies: + jasmine-core "^3.3" + +karma@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.1.tgz#2581d6caa0d4cd28b65131561b47bad6d5478773" + integrity sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A== + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + braces "^2.3.2" + chokidar "^2.0.3" + colors "^1.1.0" + connect "^3.6.0" + core-js "^2.2.0" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^4.17.11" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + useragent "2.3.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +lazystream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= + dependencies: + readable-stream "^2.0.5" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + +lcov-parse@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= + +lcov-result-merger@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz#ae6d1be663dbf7d586d8004642359d39de72039e" + integrity sha512-vGXaMNGZRr4cYvW+xMVg+rg7qd5DX9SbGXl+0S3k85+gRZVK4K7UvxPWzKb/qiMwe+4bx3EOrW2o4mbdb1WnsA== + dependencies: + through2 "^2.0.3" + vinyl "^2.1.0" + vinyl-fs "^3.0.2" + +lead@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= + dependencies: + flush-write-stream "^1.0.2" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +liftoff@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" + integrity sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew= + dependencies: + extend "^3.0.0" + findup-sync "^2.0.0" + fined "^1.0.1" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +livereload-js@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" + integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.isfinite@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" + integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== + +lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= + +lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + +lodash@~4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.6.1.tgz#df00c1164ad236b183cfc3887a5e8d38cc63cbbc" + integrity sha1-3wDBFkrSNrGDz8OIel6NOMxjy7w= + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +log4js@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.0.tgz#57983c6a443546a8c8607e9cb045d2a117c27644" + integrity sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.2" + streamroller "^1.0.4" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@4.1.x, lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + integrity sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw== + dependencies: + kind-of "^6.0.2" + +map-cache@^0.2.0, map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" + integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== + +maxmin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/maxmin/-/maxmin-2.1.0.tgz#4d3b220903d95eee7eb7ac7fa864e72dc09a3166" + integrity sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY= + dependencies: + chalk "^1.0.0" + figures "^1.0.1" + gzip-size "^3.0.0" + pretty-bytes "^3.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== + dependencies: + mime-db "~1.38.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== + +mime@^2.0.3, mime@^2.3.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" + integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +morgan@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.2" + on-finished "~2.3.0" + on-headers "~1.0.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +nan@^2.10.0, nan@^2.9.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@~1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" + integrity sha1-H5bWDjFBysG20FZTzg2urHY69qo= + +ncp@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" + integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= + +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= + +neo-async@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +node-gyp@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "^2.87.0" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-http2@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/node-http2/-/node-http2-4.0.1.tgz#164ff53b5dd22c84f0af142b877c5eaeb6809959" + integrity sha1-Fk/1O13SLITwrxQrh3xerraAmVk= + dependencies: + assert "1.4.1" + events "1.1.1" + https-browserify "0.0.1" + setimmediate "^1.0.5" + stream-browserify "2.0.1" + timers-browserify "2.0.2" + url "^0.11.0" + websocket-stream "^5.0.1" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-sass@^4.7.2: + version "4.11.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" + integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== + dependencies: + async-foreach "^0.1.3" + chalk "^1.1.1" + cross-spawn "^3.0.0" + gaze "^1.0.0" + get-stdin "^4.0.1" + glob "^7.0.3" + in-publish "^2.0.0" + lodash.assign "^4.2.0" + lodash.clonedeep "^4.3.2" + lodash.mergewith "^4.6.0" + meow "^3.7.0" + mkdirp "^0.5.1" + nan "^2.10.0" + node-gyp "^3.8.0" + npmlog "^4.0.0" + request "^2.88.0" + sass-graph "^2.2.4" + stdout-stream "^1.4.0" + "true-case-path" "^1.0.2" + +nomnom@^1.5.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + +"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= + dependencies: + abbrev "1" + +nopt@^4.0.1, nopt@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +now-and-later@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" + integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= + dependencies: + once "^1.3.2" + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + integrity sha1-l33/1xdgErnsMNKjnbXPcqBDnt0= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + integrity sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + integrity sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + +object.pick@^1.2.0, object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +opn@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +ordered-read-streams@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= + dependencies: + readable-stream "^2.0.1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +pako@~1.0.2: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parse-entities@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" + integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-filepath@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= + dependencies: + is-absolute "^1.0.0" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pathval@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" + integrity sha1-CPkRzcqczllCiA2ngXvAtyO2bYI= + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkginfo@0.3.x: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" + integrity sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE= + +pkginfo@0.x.x: + version "0.4.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" + integrity sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8= + +portscanner@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" + integrity sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw== + dependencies: + async "^2.6.0" + is-number-like "^1.0.3" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +pretty-bytes@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-3.0.1.tgz#27d0008d778063a0b4811bb35c79f1bd5d5fbccf" + integrity sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8= + dependencies: + number-is-nan "^1.0.0" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + +progress@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompt@~0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" + integrity sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w= + dependencies: + pkginfo "0.x.x" + read "1.0.x" + revalidator "0.1.x" + utile "0.2.x" + winston "0.8.x" + +protractor@^5.0.0: + version "5.4.2" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.2.tgz#329efe37f48b2141ab9467799be2d4d12eb48c13" + integrity sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.0.6" + +proxy-from-env@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +puppeteer@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.13.0.tgz#187ccf5ed5caf08ed1291b262d033cc364bf88ab" + integrity sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ== + dependencies: + debug "^4.1.0" + extract-zip "^1.6.6" + https-proxy-agent "^2.2.1" + mime "^2.0.3" + progress "^2.0.1" + proxy-from-env "^1.0.0" + rimraf "^2.6.1" + ws "^6.1.0" + +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.5.2, qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +qs@^6.4.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +range-parser@^1.2.0, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" + +raw-body@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= + dependencies: + bytes "1" + string_decoder "0.10" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read@1.0.x: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" + integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +remark-frontmatter@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz#bc28c0c913fa0b9dd26f17304bc47b856b2ea2de" + integrity sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A== + dependencies: + fault "^1.0.1" + xtend "^4.0.1" + +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remove-bom-buffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== + dependencies: + is-buffer "^1.1.5" + is-utf8 "^0.2.1" + +remove-bom-stream@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= + dependencies: + remove-bom-buffer "^3.0.0" + safe-buffer "^5.1.0" + through2 "^2.0.3" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + +replace-ext@1.0.0, replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +request@^2.86.0, request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +reserved-words@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-options@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= + dependencies: + value-or-function "^3.0.0" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.x, resolve@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +revalidator@0.1.x: + version "0.1.8" + resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" + integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= + +rfdc@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" + integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== + +rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-parse@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@^1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@^1.0.0, set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + integrity sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E= + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.0, source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.1, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split@^1.0.0, split@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +state-toggle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stdout-stream@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" + integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== + dependencies: + readable-stream "^2.0.1" + +stream-browserify@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +streamroller@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.4.tgz#d485c7624796d5e2eb34190c79afcbf006afb5e6" + integrity sha512-Wc2Gm5ygjSX8ZpW9J7Y9FwiSzTlKSvcl0FTTMd3rn7RoxDXpBW+xD9TY5sWL2n0UR61COB0LG1BQvN6nTUQbLQ== + dependencies: + async "^2.6.1" + date-format "^2.0.0" + debug "^3.1.0" + fs-extra "^7.0.0" + lodash "^4.17.10" + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@0.10, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@1.0.x, strip-json-comments@~1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +structured-source@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" + integrity sha1-3YAkJeD1PcSm56yjdSkBoczaevU= + dependencies: + boundary "^1.0.1" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tar@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +through2-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" + integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== + dependencies: + through2 "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" + integrity sha1-q0iDz1l9zVCvIRNJoA+8pWrIa4Y= + dependencies: + setimmediate "^1.0.4" + +tiny-lr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== + dependencies: + body "^5.1.0" + debug "^3.1.0" + faye-websocket "~0.10.0" + livereload-js "^2.3.0" + object-assign "^4.1.0" + qs "^6.4.0" + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.0.33, tmp@0.0.x: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-absolute-glob@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= + dependencies: + is-absolute "^1.0.0" + is-negated-glob "^1.0.0" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-double-quotes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" + integrity sha1-qvIx1vqUiUn4GTAburRITYWI5Kc= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-single-quotes@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" + integrity sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU= + +to-through@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= + dependencies: + through2 "^2.0.3" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= + +trim-trailing-lines@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== + +"true-case-path@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" + integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== + dependencies: + glob "^7.1.2" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.1.4, uglify-js@^3.5.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.2.tgz#dc0c7ac2da0a4b7d15e84266818ff30e82529474" + integrity sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg== + dependencies: + commander "~2.19.0" + source-map "~0.6.1" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +underscore.string@~3.3.4: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + +unherit@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unified@^6.1.6: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +unique-stream@^2.0.2: + version "2.3.1" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" + integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== + dependencies: + json-stable-stringify-without-jsonify "^1.0.1" + through2-filter "^3.0.0" + +unist-util-is@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== + +unist-util-remove-position@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-visit-parents@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== + dependencies: + unist-util-is "^2.1.2" + +unist-util-visit@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== + dependencies: + unist-util-visit-parents "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +update-section@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" + integrity sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +uri-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/uri-path/-/uri-path-1.0.0.tgz#9747f018358933c31de0fccfd82d138e67262e32" + integrity sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI= + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +utile@0.2.x: + version "0.2.1" + resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" + integrity sha1-kwyI6ZCY1iIINMNWy9mncFItkNc= + dependencies: + async "~0.2.9" + deep-equal "*" + i "0.3.x" + mkdirp "0.x.x" + ncp "0.4.x" + rimraf "2.x.x" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= + +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8flags@~3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.2.tgz#fc5cd0c227428181e6c29b2992e4f8f1da5e0c9f" + integrity sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-function@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" + integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vinyl-fs@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== + dependencies: + fs-mkdirp-stream "^1.0.0" + glob-stream "^6.1.0" + graceful-fs "^4.0.0" + is-valid-glob "^1.0.0" + lazystream "^1.0.0" + lead "^1.0.0" + object.assign "^4.0.4" + pumpify "^1.3.5" + readable-stream "^2.3.3" + remove-bom-buffer "^3.0.0" + remove-bom-stream "^1.2.0" + resolve-options "^1.1.0" + through2 "^2.0.0" + to-through "^2.0.0" + value-or-function "^3.0.0" + vinyl "^2.0.0" + vinyl-sourcemap "^1.1.0" + +vinyl-sourcemap@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= + dependencies: + append-buffer "^1.0.2" + convert-source-map "^1.5.0" + graceful-fs "^4.1.6" + normalize-path "^2.1.1" + now-and-later "^2.0.0" + remove-bom-buffer "^3.0.0" + vinyl "^2.0.0" + +vinyl@^2.0.0, vinyl@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +vow-fs@~0.3.4: + version "0.3.6" + resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" + integrity sha1-LUxZviLivyYY3fWXq0uqkjvnIA0= + dependencies: + glob "^7.0.5" + uuid "^2.0.2" + vow "^0.4.7" + vow-queue "^0.4.1" + +vow-queue@^0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.3.tgz#4ba8f64b56e9212c0dbe57f1405aeebd54cce78d" + integrity sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw== + dependencies: + vow "^0.4.17" + +vow@^0.4.17, vow@^0.4.7, vow@~0.4.1, vow@~0.4.8: + version "0.4.19" + resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.19.tgz#cc5ef4d6bb6972d830830a7c9ecf8ad834a7c525" + integrity sha512-S+0+CiQlbUhTNWMlJdqo/ARuXOttXdvw5ACGyh1W97NFHUdwt3Fzyaus03Kvdmo733dwnYS9AGJSDg0Zu8mNfA== + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.0.6: + version "12.1.1" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.1.tgz#66c3271f69cefdaa9fdfca617ae95afae41c3c62" + integrity sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +websocket-stream@^5.0.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.3.0.tgz#aeeb2919c437133082c915ab74d21ec7849dd618" + integrity sha512-L4kN0NYwZJc0q7QKVHyjS7oNx2TuLyx6P2RDVJwejuKRYklU72FwLMRmQP/1UEYwNVTJgjBtNpde4NvqeyswLQ== + dependencies: + duplexify "^3.6.1" + inherits "^2.0.1" + readable-stream "^3.0.0" + safe-buffer "^5.1.2" + ws "^6.1.2" + xtend "^4.0.0" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +winston@0.8.x: + version "0.8.3" + resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" + integrity sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA= + dependencies: + async "0.2.x" + colors "0.6.x" + cycle "1.0.x" + eyes "0.1.x" + isstream "0.1.x" + pkginfo "0.3.x" + stack-trace "0.0.x" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.1.0, ws@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" + integrity sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE= + dependencies: + lodash "^3.5.0" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= + dependencies: + camelcase "^3.0.0" + +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= + dependencies: + camelcase "^3.0.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.2" + which-module "^1.0.0" + y18n "^3.2.1" + yargs-parser "^5.0.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= From 6a8949ec837a81009cb531d8d81d222bb16c3813 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 5 Nov 2019 16:58:31 -0800 Subject: [PATCH 0028/1298] upgraded to latest rev of libs * did a 'yarn upgrade' to get latest compatible lib for .lock file * updated all samples to latest version on CDN. Tested each one --- demo/anijs.html | 10 +- demo/float.html | 10 +- demo/knockout.html | 12 +- demo/knockout2.html | 12 +- demo/nested.html | 10 +- demo/responsive.html | 10 +- demo/rtl.html | 12 +- demo/serialization.html | 10 +- demo/two.html | 10 +- spec/e2e/html/gridstack-with-height.html | 10 +- yarn.lock | 1409 +++++++++++----------- 11 files changed, 775 insertions(+), 740 deletions(-) diff --git a/demo/anijs.html b/demo/anijs.html index d8898493c..d4222cf9e 100644 --- a/demo/anijs.html +++ b/demo/anijs.html @@ -10,15 +10,15 @@ AniJS demo - + - - - - + + + + diff --git a/demo/float.html b/demo/float.html index 040f9b999..774178dd8 100644 --- a/demo/float.html +++ b/demo/float.html @@ -10,13 +10,13 @@ Float grid demo - + - - - - + + + + diff --git a/demo/knockout.html b/demo/knockout.html index a7677333e..c15728558 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -10,14 +10,14 @@ Knockout.js demo - + - - - - - + + + + + diff --git a/demo/knockout2.html b/demo/knockout2.html index f7beb9287..227d1da19 100644 --- a/demo/knockout2.html +++ b/demo/knockout2.html @@ -10,14 +10,14 @@ Knockout.js demo - + - - - - - + + + + + diff --git a/demo/nested.html b/demo/nested.html index 607d1093d..5d27d8c77 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -10,13 +10,13 @@ Nested grids demo - + - - - - + + + + diff --git a/demo/responsive.html b/demo/responsive.html index 88f645ed9..c5b1a7a8e 100644 --- a/demo/responsive.html +++ b/demo/responsive.html @@ -10,14 +10,14 @@ Responsive grid demo - + - - - - + + + + diff --git a/demo/rtl.html b/demo/rtl.html index 564cfbab0..ca07c92bf 100644 --- a/demo/rtl.html +++ b/demo/rtl.html @@ -10,14 +10,14 @@ RTL demo - + - - - - - + + + + + diff --git a/demo/serialization.html b/demo/serialization.html index 594784a98..0618f2f10 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -10,13 +10,13 @@ Serialization demo - + - - - - + + + + diff --git a/demo/two.html b/demo/two.html index 8c71e8904..c31252650 100644 --- a/demo/two.html +++ b/demo/two.html @@ -10,14 +10,14 @@ Two grids demo - + - - - - + + + + diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index 8bd6cbb3f..cd0f540b4 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -10,13 +10,13 @@ gridstack.js tests - + - - - - + + + + diff --git a/yarn.lock b/yarn.lock index 7dbcc46a7..fba46adfd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,9 +3,9 @@ "@textlint/ast-node-types@^4.0.3": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.1.tgz#978fa10e23468114462fc08ef29f96980c12a8ef" - integrity sha512-Pqg1LTJpF929Ovi/lCaPqlyz8yDwBFbQulC0jyQcbRAoTxYS4AZMc48Ug2yk0so5hISQXKrlAxyVBmBVl9EKGA== + version "4.2.5" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.5.tgz#ae13981bc8711c98313a6ac1c361194d6bf2d39b" + integrity sha512-+rEx4jLOeZpUcdvll7jEg/7hNbwYvHWFy4IGW/tk2JdbyB3SJVyIP6arAwzTH/sp/pO9jftfyZnRj4//sLbLvQ== "@textlint/markdown-to-ast@~6.0.9": version "6.0.9" @@ -26,9 +26,9 @@ integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/selenium-webdriver@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz#024c24051c3798e9a0cf5cceb1c893140df1bc31" - integrity sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q== + version "3.0.16" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz#50a4755f8e33edacd9c406729e9b930d2451902a" + integrity sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA== JSV@^4.0.x: version "4.0.2" @@ -46,12 +46,12 @@ abbrev@1.0.x: integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + mime-types "~2.1.24" + negotiator "0.6.2" adm-zip@^0.4.9: version "0.4.13" @@ -63,17 +63,17 @@ after@0.8.2: resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= -agent-base@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" ajv@^6.5.5: - version "6.10.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" - integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -119,13 +119,13 @@ ansi-styles@~1.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + normalize-path "^3.0.0" + picomatch "^2.0.4" append-buffer@^1.0.2: version "1.0.2" @@ -235,20 +235,15 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -async-each@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" - integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== - async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@0.2.x, async@~0.2.9: version "0.2.10" @@ -260,12 +255,12 @@ async@1.x, async@~1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.6.0, async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" - integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== +async@^2.6.0, async@^2.6.1, async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: - lodash "^4.17.11" + lodash "^4.17.14" asynckit@^0.4.0: version "0.4.0" @@ -306,9 +301,9 @@ backo2@1.0.2: integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= bail@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" - integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" + integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== balanced-match@^1.0.0: version "1.0.0" @@ -364,10 +359,10 @@ better-assert@~1.0.0: dependencies: callsite "1.0.0" -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== blob@0.0.5: version "0.0.5" @@ -389,25 +384,25 @@ blocking-proxy@^1.0.0: minimist "^1.2.0" bluebird@^3.3.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" - integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== body-parser@^1.16.1: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" body@^5.1.0: version "5.1.0" @@ -432,7 +427,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -448,10 +443,17 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + browserstack@^1.5.1: - version "1.5.2" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.2.tgz#17d8bb76127a1cc0ea416424df80d218f803673f" - integrity sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== dependencies: https-proxy-agent "^2.2.1" @@ -488,10 +490,10 @@ bytes@1: resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== cache-base@^1.0.1: version "1.0.1" @@ -566,43 +568,34 @@ chalk@~0.4.0: strip-ansi "~0.1.0" character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" - integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" + integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" - integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== + version "1.2.3" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" + integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" - integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" + integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== -chokidar@^2.0.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.5.tgz#0ae8434d962281a5f56c72869e79cb6d9d86ad4d" - integrity sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" +chokidar@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" optionalDependencies: - fsevents "^1.2.7" - -chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + fsevents "~2.1.1" class-utils@^0.3.5: version "0.3.6" @@ -661,9 +654,9 @@ clone@^2.1.1: integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= cloneable-readable@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" - integrity sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" + integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== dependencies: inherits "^2.0.1" process-nextick-args "^2.0.0" @@ -680,9 +673,9 @@ coffeescript@~1.10.0: integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= collapse-white-space@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" - integrity sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" + integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== collection-visit@^1.0.0: version "1.0.0" @@ -715,9 +708,9 @@ colors@1.0.3: integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= colors@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colors@~1.1.2: version "1.1.2" @@ -725,16 +718,16 @@ colors@~1.1.2: integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" - integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@~2.9.0: version "2.9.0" @@ -755,11 +748,16 @@ component-bind@1.0.0: resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= -component-emitter@1.2.1, component-emitter@^1.2.1: +component-emitter@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" @@ -791,13 +789,13 @@ connect-livereload@^0.6.0: integrity sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g== connect@^3.6.0, connect@^3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== dependencies: debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" + finalhandler "1.1.2" + parseurl "~1.3.3" utils-merge "1.0.1" console-browserify@1.1.x: @@ -839,15 +837,15 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.2.0, core-js@^2.4.0: - version "2.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" - integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== +core-js@^2.4.0: + version "2.6.10" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.10.tgz#8a5b8391f8cc7013da703411ce5b585706300d7f" + integrity sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA== core-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.0.0.tgz#a8dbfa978d29bfc263bfb66c556d0ca924c28957" - integrity sha512-WBmxlgH2122EzEJ6GH8o9L/FeoUKxxxZ6q6VUxoTlsE4EvbTWKJb447eyVxTEuq0LpXjlq/kCB2qgBvsYRkLvQ== + version "3.3.6" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.6.tgz#6ad1650323c441f45379e176ed175c0d021eac92" + integrity sha512-u4oM8SHwmDuh5mWZdDg9UwNVq5s1uqq6ZDLLIs07VY+VJU91i3h4f3K/pgFvtUQPGdeStrZ+odKyfyt4EnKHfA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -855,12 +853,12 @@ core-util-is@1.0.2, core-util-is@~1.0.0: integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= coveralls@^3.0.3, coveralls@~3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.3.tgz#83b1c64aea1c6afa69beaf50b55ac1bc4d13e2b8" - integrity sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg== + version "3.0.7" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.7.tgz#1eca48e47976e9573d6a2f18b97c2fea4026f34a" + integrity sha512-mUuH2MFOYB2oBaA4D4Ykqi9LaEYpMMlsiOMJOrv358yAjP6enPIk55fod2fNJ8AvwoYXStWQls37rA+s5e7boA== dependencies: growl "~> 1.10.0" - js-yaml "^3.11.0" + js-yaml "^3.13.1" lcov-parse "^0.0.10" log-driver "^1.2.7" minimist "^1.2.0" @@ -908,9 +906,9 @@ dashdash@^1.12.0: assert-plus "^1.0.0" date-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" - integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== date-now@^0.1.4: version "0.1.4" @@ -925,14 +923,14 @@ dateformat@^1.0.6, dateformat@~1.0.12: get-stdin "^4.0.1" meow "^3.3.0" -debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -964,21 +962,23 @@ decode-uri-component@^0.2.0: integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= deep-equal@*: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" + integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -define-properties@^1.1.2: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1045,11 +1045,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" @@ -1078,18 +1073,23 @@ dom-serialize@^2.2.0: void-elements "^2.0.0" dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + version "0.2.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" + integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" + domelementtype "^2.0.1" + entities "^2.0.0" domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + domhandler@2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" @@ -1125,7 +1125,7 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^3.6.0, duplexify@^3.6.1: +duplexify@^3.5.1, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -1161,15 +1161,15 @@ emoji-regex@~6.1.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI= -encodeurl@~1.0.1, encodeurl@~1.0.2: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -1228,6 +1228,11 @@ entities@^1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1236,17 +1241,41 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" error@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" - integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + version "7.2.0" + resolved "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245" + integrity sha512-M6t3j3Vt3uDicrViMP5fLq2AeADNrCVFD8Oj4Qt2MHsX0mPYG7D5XdnEfSdRpaHQzjAJ19wu+I1mw9rQYMTAPg== dependencies: string-template "~0.2.1" - xtend "~4.0.0" + +es-abstract@^1.5.1: + version "1.16.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" + integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" es6-promise@^4.0.3: - version "4.2.6" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" - integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" @@ -1293,14 +1322,14 @@ estraverse@^1.9.1: integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= estraverse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" @@ -1312,10 +1341,10 @@ eventemitter2@~0.4.13: resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" integrity sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas= -eventemitter3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== events@1.1.1: version "1.1.1" @@ -1422,9 +1451,9 @@ fast-levenshtein@~2.0.4: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fault@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.2.tgz#c3d0fec202f172a3a4d414042ad2bb5e2a3ffbaa" - integrity sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.3.tgz#4da88cf979b6b792b4e13c7ec836767725170b7e" + integrity sha512-sfFuP4X0hzrbGKjAUNXYvNqsZ5F6ohx/dZ9I0KQud/aiZNwg263r5L9yGB0clvXHCkzXh5W3t7RSHchggYIFmA== dependencies: format "^0.2.2" @@ -1465,17 +1494,24 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" - encodeurl "~1.0.1" + encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" find-up@^1.0.0: @@ -1504,9 +1540,9 @@ findup-sync@~0.3.0: glob "~5.0.0" fined@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" - integrity sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g== + version "1.2.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.2.0.tgz#d00beccf1aa2b475d16d423b0238b713a2c4a37b" + integrity sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng== dependencies: expand-tilde "^2.0.2" is-plain-object "^2.0.3" @@ -1520,9 +1556,9 @@ flagged-respawn@^1.0.0: integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== flatted@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" - integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== flush-write-stream@^1.0.2: version "1.1.1" @@ -1533,11 +1569,11 @@ flush-write-stream@^1.0.2: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" - integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== dependencies: - debug "^3.2.6" + debug "^3.0.0" for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" @@ -1589,7 +1625,7 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-extra@^7.0.0: +fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== @@ -1598,13 +1634,6 @@ fs-extra@^7.0.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== - dependencies: - minipass "^2.2.1" - fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" @@ -1618,18 +1647,15 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" - integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" +fsevents@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.1.tgz#74c64e21df71721845d0c44fe54b7f56b82995a9" + integrity sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw== -fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= +fstream@^1.0.0, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -1697,6 +1723,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -1725,9 +1758,9 @@ glob@^5.0.1, glob@^5.0.15, glob@~5.0.0: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + version "7.1.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" + integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1790,9 +1823,9 @@ globule@^1.0.0: minimatch "~3.0.2" graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== "graceful-readlink@>= 1.0.0": version "1.0.1" @@ -1826,14 +1859,14 @@ grunt-cli@~1.2.0: resolve "~1.1.0" grunt-contrib-connect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.0.0.tgz#7ee86838f351f72c12186143ebc60823d8d524dd" - integrity sha512-JVjM9UDP84WbT2S7swkyuwPuxFtT+zry/RUBuP3IT8LZPEQjtzzMwiM+qimswNKQ9plh5WhcFWaaqz2ruB9/DA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.1.0.tgz#c689c3d9d2c2bacb6fccc81e5cd65702bf8e2b50" + integrity sha512-yeCHdz5zqoibhQDyw/X+E/wTzYPpim+C2p+xYyXUsXVEkfxnKVIWYOWrAKkFHlz9//nIC0S3JbUDd3mVvJcxVA== dependencies: async "^2.6.1" connect "^3.6.6" connect-livereload "^0.6.0" - morgan "^1.9.0" + morgan "^1.9.1" node-http2 "^4.0.1" opn "^5.3.0" portscanner "^2.2.0" @@ -1988,9 +2021,9 @@ gzip-size@^3.0.0: duplexer "^0.1.1" handlebars@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.1.tgz#6e4e41c18ebe7719ae4d38e5aca3d32fa3dd23d3" - integrity sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA== + version "4.5.1" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.1.tgz#8a01c382c180272260d07f2d1aa3ae745715c7ba" + integrity sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -2086,6 +2119,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -2099,9 +2139,9 @@ hooker@^0.2.3, hooker@~0.2.3: integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk= hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== htmlparser2@3.8.3, htmlparser2@3.8.x: version "3.8.3" @@ -2126,7 +2166,18 @@ htmlparser2@~3.9.2: inherits "^2.0.1" readable-stream "^2.0.2" -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= @@ -2136,17 +2187,28 @@ http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-parser-js@>=0.4.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" - integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= http-proxy@^1.13.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" - integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g== + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== dependencies: - eventemitter3 "^3.0.0" + eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" @@ -2165,11 +2227,11 @@ https-browserify@0.0.1: integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= https-proxy-agent@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: - agent-base "^4.1.0" + agent-base "^4.3.0" debug "^3.1.0" i@0.3.x: @@ -2177,27 +2239,13 @@ i@0.3.x: resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0= -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -2233,17 +2281,22 @@ inherit@^2.2.2: resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@^1.3.4, ini@~1.3.0: +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -2281,35 +2334,45 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" - integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" + integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" - integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" + integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - binary-extensions "^1.0.0" + binary-extensions "^2.0.0" is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2324,10 +2387,15 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" - integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" + integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== is-descriptor@^0.1.0: version "0.1.6" @@ -2390,7 +2458,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -2398,9 +2466,9 @@ is-glob@^4.0.0: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" - integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" + integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== is-negated-glob@^1.0.0: version "1.0.0" @@ -2421,6 +2489,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -2445,13 +2518,20 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -2459,6 +2539,13 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2482,9 +2569,9 @@ is-valid-glob@^1.0.0: integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= is-whitespace-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" - integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" + integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" @@ -2492,9 +2579,9 @@ is-windows@^1.0.1, is-windows@^1.0.2: integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" - integrity sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" + integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== is-wsl@^1.1.0: version "1.1.0" @@ -2566,9 +2653,9 @@ istanbul@^0.4.0: wordwrap "^1.0.0" jasmine-core@^3.3, jasmine-core@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.3.0.tgz#dea1cdc634bc93c7e0d4ad27185df30fa971b10e" - integrity sha512-3/xSmG/d35hf80BEN66Y6g9Ca5l/Isdeg/j6zvbTYlTzeKinzmaTM4p9am5kYqOmE05D7s1t8FGjzdSnbUbceA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" + integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== jasmine-core@~2.8.0: version "2.8.0" @@ -2595,19 +2682,19 @@ jquery-ui@^1.12.0: integrity sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE= jquery@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.0.tgz#8de513fa0fa4b2c7d2e48a530e26f0596936efdf" - integrity sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2" + integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw== js-base64@^2.1.8: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== -js-yaml@3.x, js-yaml@^3.11.0, js-yaml@~3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.0.tgz#38ee7178ac0eea2c97ff6d96fff4b18c7d8cf98e" - integrity sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ== +js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2679,9 +2766,9 @@ jsdoctypeparser@~1.2.0: lodash "^3.7.0" jshint@~2.10.2: - version "2.10.2" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.2.tgz#ed6626c4f8223c98e94aaea62767435427a49a3d" - integrity sha512-e7KZgCSXMJxznE/4WULzybCMNXNAd/bf5TSrvVEq78Q/K8ZwFpmBqQeDtNiHc3l49nV4E/+YeHU/JZjSUIrLAA== + version "2.10.3" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.10.3.tgz#98dc765bf6920b41bc2719f76b8739d6f6e93a9c" + integrity sha512-d8AoXcNNYzmm7cdmulQ3dQApbrPYArtVBO6n4xOICe4QsXGNHCAKDcFORzqP52LhK61KX0VhY39yYzCsNq+bxQ== dependencies: cli "~1.0.0" console-browserify "1.1.x" @@ -2738,9 +2825,9 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.1.3: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.1.tgz#c5d32df7274042282b157efb16e522b43435e01a" - integrity sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -2784,17 +2871,16 @@ karma-jasmine@^2.0.1: jasmine-core "^3.3" karma@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.1.tgz#2581d6caa0d4cd28b65131561b47bad6d5478773" - integrity sha512-ind+4s03BqIXas7ZmraV3/kc5+mnqwCd+VDX1FndS6jxbt03kQKX2vXrWxNLuCjVYmhMwOZosAEKMM0a2q7w7A== + version "4.4.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.4.1.tgz#6d9aaab037a31136dc074002620ee11e8c2e32ab" + integrity sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A== dependencies: bluebird "^3.3.0" body-parser "^1.16.1" - braces "^2.3.2" - chokidar "^2.0.3" + braces "^3.0.2" + chokidar "^3.0.0" colors "^1.1.0" connect "^3.6.0" - core-js "^2.2.0" di "^0.0.1" dom-serialize "^2.2.0" flatted "^2.0.0" @@ -2802,7 +2888,7 @@ karma@^4.0.1: graceful-fs "^4.1.2" http-proxy "^1.13.0" isbinaryfile "^3.0.0" - lodash "^4.17.11" + lodash "^4.17.14" log4js "^4.0.0" mime "^2.3.1" minimatch "^3.0.2" @@ -2920,35 +3006,20 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== - lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== lodash@~4.6.1: version "4.6.1" @@ -2961,15 +3032,15 @@ log-driver@^1.2.7: integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== log4js@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.1.0.tgz#57983c6a443546a8c8607e9cb045d2a117c27644" - integrity sha512-eDa+zZPeVEeK6QGJAePyXM6pg4P3n3TO5rX9iZMVY48JshsTyLJZLIL5HipI1kQ2qLsSyOpUqNND/C5H4WhhiA== + version "4.5.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== dependencies: date-format "^2.0.0" debug "^4.1.1" flatted "^2.0.0" - rfdc "^1.1.2" - streamroller "^1.0.4" + rfdc "^1.1.4" + streamroller "^1.0.6" loud-rejection@^1.0.0: version "1.6.0" @@ -3012,9 +3083,9 @@ map-visit@^1.0.0: object-visit "^1.0.0" markdown-escapes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" - integrity sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" + integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== maxmin@^2.1.0: version "2.1.0" @@ -3047,7 +3118,7 @@ meow@^3.3.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.0.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -3066,27 +3137,27 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== dependencies: - mime-db "~1.38.0" + mime-db "1.40.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.0.3, mime@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" - integrity sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w== + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: version "3.0.4" @@ -3110,25 +3181,10 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== - dependencies: - minipass "^2.2.1" - mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -3140,7 +3196,7 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdir dependencies: minimist "0.0.8" -morgan@^1.9.0: +morgan@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== @@ -3156,20 +3212,25 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.10.0, nan@^2.9.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +nan@^2.13.2: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== nanomatch@^1.2.9: version "1.2.13" @@ -3198,24 +3259,15 @@ ncp@0.4.x: resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ= -needle@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" - integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== neo-async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" - integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== node-gyp@^3.8.0: version "3.8.0" @@ -3249,26 +3301,10 @@ node-http2@^4.0.1: url "^0.11.0" websocket-stream "^5.0.1" -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - node-sass@^4.7.2: - version "4.11.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" - integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA== + version "4.13.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066" + integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -3277,12 +3313,10 @@ node-sass@^4.7.2: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" - nan "^2.10.0" + nan "^2.13.2" node-gyp "^3.8.0" npmlog "^4.0.0" request "^2.88.0" @@ -3305,7 +3339,7 @@ nomnom@^1.5.x: dependencies: abbrev "1" -nopt@^4.0.1, nopt@~4.0.1: +nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= @@ -3330,32 +3364,19 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== now-and-later@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" - integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= + version "2.0.1" + resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" + integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== dependencies: once "^1.3.2" -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== - -npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -3399,10 +3420,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" - integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" @@ -3431,6 +3462,14 @@ object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.map@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" @@ -3535,9 +3574,9 @@ pako@~1.0.2: integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parse-entities@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" - integrity sha512-NBWYLQm1KSoDKk7GAHyioLTvCZ5QjdH/ASBBQTD3iLiAWJXS5bg1jEWI8nIJ+vgVvsceBVBcDGRWSo0KVQBvvg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -3581,10 +3620,10 @@ parseuri@0.0.5: dependencies: better-assert "~1.0.0" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== pascalcase@^0.1.1: version "0.1.1" @@ -3654,6 +3693,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.1.0.tgz#0fd042f568d08b1ad9ff2d3ec0f0bfb3cb80e177" + integrity sha512-uhnEDzAbrcJ8R3g2fANnSuXZMBtkpSjxTTgn2LeSiQlfmq72enQJWdQllXW24MBLYnA1SBD2vfvx2o0Zw3Ielw== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -3707,9 +3751,9 @@ pretty-bytes@^3.0.0: number-is-nan "^1.0.0" process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress@^2.0.1: version "2.0.3" @@ -3759,9 +3803,9 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: - version "1.1.31" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" - integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== pump@^2.0.0: version "2.0.1" @@ -3796,9 +3840,9 @@ punycode@^2.1.0: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== puppeteer@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.13.0.tgz#187ccf5ed5caf08ed1291b262d033cc364bf88ab" - integrity sha512-LUXgvhjfB/P6IOUDAKxOcbCz9ISwBLL9UpKghYrcBDwrOGx1m60y0iN2M64mdAUbT4+7oZM5DTxOW7equa2fxQ== + version "1.20.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" + integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== dependencies: debug "^4.1.0" extract-zip "^1.6.6" @@ -3824,34 +3868,39 @@ qjobs@^1.1.4: resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.5.2, qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -qs@^6.4.0: +qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.4.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.0.tgz#d1297e2a049c53119cb49cca366adbbacc80b409" + integrity sha512-27RP4UotQORTpmNQDX8BHPukOnBP3p1uUJY5UnDhaJB+rMt9iMsok724XL+UHU23bEFOHRMQ2ZhI99qOWUMGFA== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -range-parser@^1.2.0, range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +range-parser@^1.2.0, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" raw-body@~1.1.0: @@ -3862,16 +3911,6 @@ raw-body@~1.1.0: bytes "1" string_decoder "0.10" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -3919,23 +3958,12 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0: +readdirp@~3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" - integrity sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw== + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + picomatch "^2.0.4" rechoir@^0.6.2: version "0.6.2" @@ -3965,10 +3993,17 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + dependencies: + define-properties "^1.1.2" + remark-frontmatter@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz#bc28c0c913fa0b9dd26f17304bc47b856b2ea2de" - integrity sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A== + version "1.3.2" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz#91d9684319cd1b96cc3d9d901f10a978f39c752d" + integrity sha512-2eayxITZ8rezsXdgcXnYB3iLivohm2V/ZT4Ne8uhua6A4pk6GdLE2ZzJnbnINtD1HRLaTdB7RwF9sgUbMptJZA== dependencies: fault "^1.0.1" xtend "^4.0.1" @@ -4110,9 +4145,9 @@ resolve@1.1.x, resolve@~1.1.0: integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" - integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" @@ -4126,23 +4161,35 @@ revalidator@0.1.x: resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs= -rfdc@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" - integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== + +rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" -rimraf@2, rimraf@2.x.x, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@~2.6.2: +rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" @@ -4177,7 +4224,7 @@ saucelabs@^1.5.0: dependencies: https-proxy-agent "^2.2.1" -sax@>=0.6.0, sax@^1.2.4: +sax@>=0.6.0: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -4201,19 +4248,19 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" "semver@2 || 3 || 4 || 5", semver@^5.3.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -4222,12 +4269,12 @@ send@0.16.2: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" serve-index@^1.9.1: version "1.9.1" @@ -4243,14 +4290,14 @@ serve-index@^1.9.1: parseurl "~1.3.2" serve-static@^1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -4262,20 +4309,10 @@ set-immediate-shim@^1.0.0, set-immediate-shim@~1.0.1: resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -4292,6 +4329,11 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + shelljs@0.3.x: version "0.3.0" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" @@ -4447,9 +4489,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" - integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -4496,9 +4538,9 @@ stack-trace@0.0.x: integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== + version "1.0.2" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" + integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== static-extend@^0.1.1: version "0.1.2" @@ -4508,21 +4550,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stdout-stream@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" @@ -4543,16 +4575,16 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= -streamroller@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.4.tgz#d485c7624796d5e2eb34190c79afcbf006afb5e6" - integrity sha512-Wc2Gm5ygjSX8ZpW9J7Y9FwiSzTlKSvcl0FTTMd3rn7RoxDXpBW+xD9TY5sWL2n0UR61COB0LG1BQvN6nTUQbLQ== +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== dependencies: - async "^2.6.1" + async "^2.6.2" date-format "^2.0.0" - debug "^3.1.0" - fs-extra "^7.0.0" - lodash "^4.17.10" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" string-template@~0.2.1: version "0.2.1" @@ -4576,18 +4608,27 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4633,11 +4674,6 @@ strip-json-comments@1.0.x, strip-json-comments@~1.0.2: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" integrity sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E= -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - structured-source@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" @@ -4665,27 +4701,14 @@ supports-color@^5.3.0: has-flag "^3.0.0" tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== dependencies: block-stream "*" - fstream "^1.0.2" + fstream "^1.0.12" inherits "2" -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" @@ -4773,6 +4796,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -4795,6 +4825,11 @@ to-through@^2.0.0: dependencies: through2 "^2.0.3" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" @@ -4814,9 +4849,9 @@ trim-newlines@^1.0.0: integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" + integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== trim@0.0.1: version "0.0.1" @@ -4824,9 +4859,9 @@ trim@0.0.1: integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== + version "1.0.4" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" + integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== "true-case-path@^1.0.2": version "1.0.3" @@ -4854,13 +4889,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" typedarray@^0.0.6: version "0.0.6" @@ -4868,11 +4903,11 @@ typedarray@^0.0.6: integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= uglify-js@^3.1.4, uglify-js@^3.5.0: - version "3.5.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.2.tgz#dc0c7ac2da0a4b7d15e84266818ff30e82529474" - integrity sha512-imog1WIsi9Yb56yRt5TfYVxGmnWs3WSGU73ieSOlMVFwhJCA9W8fqFFMMj4kgDqiS/80LGdsYnWL7O9UcjEBlg== + version "3.6.7" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.7.tgz#15f49211df6b8a01ee91322bbe46fa33223175dc" + integrity sha512-4sXQDzmdnoXiO+xvmTzQsfIiwrjUCSA95rSP4SEd8tDb51W2TiDOlL76Hl+Kw0Ie42PSItCW8/t6pBNCF2R48A== dependencies: - commander "~2.19.0" + commander "~2.20.3" source-map "~0.6.1" ultron@~1.1.0: @@ -4904,9 +4939,9 @@ underscore@~1.8.3: integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" + integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== dependencies: inherits "^2.0.1" xtend "^4.0.1" @@ -4924,14 +4959,14 @@ unified@^6.1.6: x-is-string "^0.1.0" union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" - set-value "^0.4.3" + set-value "^2.0.1" unique-stream@^2.0.2: version "2.3.1" @@ -4941,15 +4976,15 @@ unique-stream@^2.0.2: json-stable-stringify-without-jsonify "^1.0.1" through2-filter "^3.0.0" -unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" + integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== dependencies: unist-util-visit "^1.1.0" @@ -4959,16 +4994,16 @@ unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== dependencies: - unist-util-is "^2.1.2" + unist-util-is "^3.0.0" unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== dependencies: unist-util-visit-parents "^2.0.0" @@ -4990,11 +5025,6 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" - integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== - update-section@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" @@ -5038,11 +5068,19 @@ useragent@2.3.0: lru-cache "4.1.x" tmp "0.0.x" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +util.promisify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" @@ -5073,14 +5111,14 @@ uuid@^2.0.2: integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== v8flags@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.2.tgz#fc5cd0c227428181e6c29b2992e4f8f1da5e0c9f" - integrity sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw== + version "3.1.3" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" + integrity sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w== dependencies: homedir-polyfill "^1.0.1" @@ -5107,9 +5145,9 @@ verror@1.10.0: extsprintf "^1.2.0" vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== + version "2.0.5" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" + integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== vfile-message@^1.0.0: version "1.1.1" @@ -5199,9 +5237,9 @@ vow-queue@^0.4.1: vow "^0.4.17" vow@^0.4.17, vow@^0.4.7, vow@~0.4.1, vow@~0.4.8: - version "0.4.19" - resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.19.tgz#cc5ef4d6bb6972d830830a7c9ecf8ad834a7c525" - integrity sha512-S+0+CiQlbUhTNWMlJdqo/ARuXOttXdvw5ACGyh1W97NFHUdwt3Fzyaus03Kvdmo733dwnYS9AGJSDg0Zu8mNfA== + version "0.4.20" + resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.20.tgz#77ca6ef0828e0043a93e55dc37030226519ce711" + integrity sha512-YYoSYXUYABqY08D/WrjcWJxJSErcILRRTQpcPyUc0SFfgIPKSUFzVt7u1HC3TXGJZM/qhsSjCLNQstxqf7asgQ== webdriver-js-extender@2.1.0: version "2.1.0" @@ -5212,9 +5250,9 @@ webdriver-js-extender@2.1.0: selenium-webdriver "^3.0.1" webdriver-manager@^12.0.6: - version "12.1.1" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.1.tgz#66c3271f69cefdaa9fdfca617ae95afae41c3c62" - integrity sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA== + version "12.1.7" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" + integrity sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA== dependencies: adm-zip "^0.4.9" chalk "^1.1.1" @@ -5229,11 +5267,12 @@ webdriver-manager@^12.0.6: xml2js "^0.4.17" websocket-driver@>=0.5.1: - version "0.7.0" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" - integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== dependencies: - http-parser-js ">=0.4.0" + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: @@ -5242,15 +5281,15 @@ websocket-extensions@>=0.1.1: integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== websocket-stream@^5.0.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.3.0.tgz#aeeb2919c437133082c915ab74d21ec7849dd618" - integrity sha512-L4kN0NYwZJc0q7QKVHyjS7oNx2TuLyx6P2RDVJwejuKRYklU72FwLMRmQP/1UEYwNVTJgjBtNpde4NvqeyswLQ== + version "5.5.0" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.5.0.tgz#9827f2846fc0d2b4dca7aab8f92980b2548b868e" + integrity sha512-EXy/zXb9kNHI07TIMz1oIUIrPZxQRA8aeJ5XYg5ihV8K4kD1DuA+FY6R96HfdIHzlSzS8HiISAfrm+vVQkZBug== dependencies: - duplexify "^3.6.1" + duplexify "^3.5.1" inherits "^2.0.1" - readable-stream "^3.0.0" + readable-stream "^2.3.3" safe-buffer "^5.1.2" - ws "^6.1.2" + ws "^3.2.0" xtend "^4.0.0" which-module@^1.0.0: @@ -5308,14 +5347,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -ws@^6.1.0, ws@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -ws@~3.3.1: +ws@^3.2.0, ws@~3.3.1: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== @@ -5324,18 +5356,26 @@ ws@~3.3.1: safe-buffer "~5.1.0" ultron "~1.1.0" +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= xml2js@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + version "0.4.22" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02" + integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw== dependencies: sax ">=0.6.0" - xmlbuilder "~9.0.1" + util.promisify "~1.0.0" + xmlbuilder "~11.0.0" xmlbuilder@^3.1.0: version "3.1.0" @@ -5344,10 +5384,10 @@ xmlbuilder@^3.1.0: dependencies: lodash "^3.5.0" -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlhttprequest-ssl@~1.5.4: version "1.5.5" @@ -5355,9 +5395,9 @@ xmlhttprequest-ssl@~1.5.4: integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: version "3.2.1" @@ -5369,11 +5409,6 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== - yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" From 47adbf1cb2761cac295763719bf318d9f5504fc5 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 5 Nov 2019 20:42:47 -0800 Subject: [PATCH 0029/1298] onStartMoving() fix to minHeight *method was not correctly counting margin when figuring out minHeight during a drag (see #999) Note: many other places don't handle margin, both height and width of cells. Should probbaly be fix globally. WidthMargin is not in opts though but CSS, making it harder. --- src/gridstack.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gridstack.js b/src/gridstack.js index 9500e59f6..ed611b167 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1278,8 +1278,9 @@ self.grid.cleanNodes(); self.grid.beginUpdate(node); cellWidth = self.cellWidth(); - var strictCellHeight = Math.ceil(o.outerHeight() / o.attr('data-gs-height')); - cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); + height = o.attr('data-gs-height'); + verticalMargin = self.opts.verticalMargin; + cellHeight = Math.ceil((o.outerHeight() - (height - 1) * verticalMargin) / height); self.placeholder .attr('data-gs-x', o.attr('data-gs-x')) .attr('data-gs-y', o.attr('data-gs-y')) @@ -1290,9 +1291,9 @@ node._beforeDragX = node.x; node._beforeDragY = node.y; node._prevYPix = ui.position.top; - + minHeight = (node.minHeight || 1); self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - self.dd.resizable(el, 'option', 'minHeight', strictCellHeight * (node.minHeight || 1)); + self.dd.resizable(el, 'option', 'minHeight', cellHeight * minHeight + (minHeight - 1) * verticalMargin); if (event.type == 'resizestart') { o.find('.grid-stack-item').trigger('resizestart'); From 279da3e811965521ce865e4ea268904790236120 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 5 Nov 2019 22:03:44 -0800 Subject: [PATCH 0030/1298] revert onStartMoving() --- src/gridstack.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gridstack.js b/src/gridstack.js index ed611b167..9500e59f6 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1278,9 +1278,8 @@ self.grid.cleanNodes(); self.grid.beginUpdate(node); cellWidth = self.cellWidth(); - height = o.attr('data-gs-height'); - verticalMargin = self.opts.verticalMargin; - cellHeight = Math.ceil((o.outerHeight() - (height - 1) * verticalMargin) / height); + var strictCellHeight = Math.ceil(o.outerHeight() / o.attr('data-gs-height')); + cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); self.placeholder .attr('data-gs-x', o.attr('data-gs-x')) .attr('data-gs-y', o.attr('data-gs-y')) @@ -1291,9 +1290,9 @@ node._beforeDragX = node.x; node._beforeDragY = node.y; node._prevYPix = ui.position.top; - minHeight = (node.minHeight || 1); + self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - self.dd.resizable(el, 'option', 'minHeight', cellHeight * minHeight + (minHeight - 1) * verticalMargin); + self.dd.resizable(el, 'option', 'minHeight', strictCellHeight * (node.minHeight || 1)); if (event.type == 'resizestart') { o.find('.grid-stack-item').trigger('resizestart'); From aa8b886338c9919add9fd3b7bb9d2e52f4ceff68 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 6 Nov 2019 10:57:05 -0800 Subject: [PATCH 0031/1298] removed 1.0 release doc info as it was causing generated doc to be modified on each builds (git mod). We can add it back if/when it makes sense. --- README.md | 11 +---------- doc/CHANGES.md | 5 ----- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/README.md b/README.md index 28dea11de..bb44362f8 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Join gridstack.js on Slack: https://gridstackjs.troolee.com **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - - [Demo and examples](#demo-and-examples) - [Usage](#usage) - [Requirements](#requirements) @@ -32,20 +31,12 @@ Join gridstack.js on Slack: https://gridstackjs.troolee.com - [Different grid widths](#different-grid-widths) - [Override resizable/draggable options](#override-resizabledraggable-options) - [IE8 support](#ie8-support) - - [Use with require.js](#use-with-requirejs) - [Changes](#changes) - [The Team](#the-team) - -gridstack.js News -===== - -Version 1.0 is coming! Check out the blog post here for more information: -[https://dylandreams.com/2017/04/26/gridstack-10-coming-soon/](https://dylandreams.com/2017/04/26/gridstack-10-coming-soon/) and [subscribe to the blog](https://dylandreams.com) for more gridstack news and tutorials. ---> - Demo and examples ==== diff --git a/doc/CHANGES.md b/doc/CHANGES.md index f56adc370..37d60a334 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,6 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v1.0.0 (development)](#v100-development) - [v0.5.0 (2019-03-29)](#v050-2019-03-29) - [v0.4.0 (2018-05-11)](#v040-2018-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) @@ -20,10 +19,6 @@ Change log -## v1.0.0 (development) - -TBD - ## v0.5.0 (2019-03-29) - emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/gridstack/gridstack.js/issues/823)). From 06bc3acd9c4b187802379b11e59084ff8ae4eaa0 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 6 Nov 2019 12:35:18 -0800 Subject: [PATCH 0032/1298] 0.6.0-dev name change --- bower.json | 2 +- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bower.json b/bower.json index 1a074a74f..dcf149a38 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.0", + "version": "0.6.0-dev", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 37d60a334..fc328b1f6 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v0.5.0 (2019-03-29)](#v050-2019-03-29) +- [v0.5.0 (2019-11-06)](#v050-2019-11-06) - [v0.4.0 (2018-05-11)](#v040-2018-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) - [v0.2.6 (2016-08-17)](#v026-2016-08-17) @@ -19,7 +19,7 @@ Change log -## v0.5.0 (2019-03-29) +## v0.5.0 (2019-11-06) - emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/gridstack/gridstack.js/issues/823)). - don't throw error if no bounding scroll element is found ([#891](https://github.com/gridstack/gridstack.js/issues/891)). diff --git a/package.json b/package.json index c14b4de1c..88fce70f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.0", + "version": "0.6.0-dev", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 25b25f996..e03e6ce9e 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.0 + * gridstack.js 0.6.0-dev * http://troolee.github.io/gridstack.js/ * (c) 2014-2017 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.js b/src/gridstack.js index 9500e59f6..3eb4efded 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.0 + * gridstack.js 0.6.0-dev * http://troolee.github.io/gridstack.js/ * (c) 2014-2018 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. From 26fb79471cef34f29c96ab2b6c775ca0905159ff Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 7 Nov 2019 10:48:18 -0800 Subject: [PATCH 0033/1298] reduced npm package * from 672k to 324k (drop demo, src and extra files) * fix API doc, tweaked package credits rev 0.5.1 --- .gitignore | 8 +++++--- .npmignore | 36 +++++++++++++++++++++++++----------- bower.json | 5 +++-- doc/CHANGES.md | 5 +++++ doc/README.md | 11 ++++++++--- package.json | 5 +++-- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 8 files changed, 51 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index a3e22fcb8..53ee4c736 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ -dist -node_modules +*.log +*.tgz +.npmrc bower_components coverage -*.log +dist +node_modules \ No newline at end of file diff --git a/.npmignore b/.npmignore index e440a583f..b7b698270 100644 --- a/.npmignore +++ b/.npmignore @@ -1,15 +1,29 @@ -node_modules -bower_components -coverage -*.log -spec -freelancer -.jscsrc +# Source & demo +src/ +demo/ +spec/ + +# dependencies +yarn.lock + +# Configuration .gitignore -README.md -PULL_REQUEST_TEMPLATE.md -ISSUE_TEMPLATE.md -protractor.conf.js +.jscsrc +.npmignore .travis.yml Gruntfile.js +ISSUE_TEMPLATE.md +PULL_REQUEST_TEMPLATE.md +freelancer karma.conf.js +protractor.conf.js + +## From .gitignore: +*.log +*.tgz +bower_components +coverage/ +node_modules/ + +# files that might have secrets in them +.npmrc diff --git a/bower.json b/bower.json index dcf149a38..c0d2abd8d 100644 --- a/bower.json +++ b/bower.json @@ -1,10 +1,11 @@ { "name": "gridstack", - "version": "0.6.0-dev", + "version": "0.5.1", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", - "Dylan Weiss (https://dylandreams.com)" + "Dylan Weiss (https://dylandreams.com)", + "Alain Dumesny (https://github.com/adumesny)" ], "description": "gridstack.js is a jQuery plugin for widget layout", "main": [ diff --git a/doc/CHANGES.md b/doc/CHANGES.md index fc328b1f6..c62a23766 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [v0.5.1 (2019-11-07)](#v051-2019-11-07) - [v0.5.0 (2019-11-06)](#v050-2019-11-06) - [v0.4.0 (2018-05-11)](#v040-2018-05-11) - [v0.3.0 (2017-04-21)](#v030-2017-04-21) @@ -19,6 +20,10 @@ Change log +## v0.5.1 (2019-11-07) + +- reduced npm package size from 672k to 324k (drop demo, src and extra files) + ## v0.5.0 (2019-11-06) - emit `dropped` event when a widget is dropped from one grid into another ([#823](https://github.com/gridstack/gridstack.js/issues/823)). diff --git a/doc/README.md b/doc/README.md index 6a3bd403f..322c21030 100644 --- a/doc/README.md +++ b/doc/README.md @@ -23,7 +23,7 @@ gridstack.js API - [addWidget(el[, x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id])](#addwidgetel-x-y-width-height-autoposition-minwidth-maxwidth-minheight-maxheight-id) - [batchUpdate()](#batchupdate) - [cellHeight()](#cellheight) - - [cellHeight(val)](#cellheightval) + - [cellHeight(val, noUpdate)](#cellheightval-noupdate) - [cellWidth()](#cellwidth) - [commit()](#commit) - [destroy([detachGrid])](#destroydetachgrid) @@ -49,6 +49,7 @@ gridstack.js API - [setGridWidth(gridWidth, doNotPropagate)](#setgridwidthgridwidth-donotpropagate) - [setStatic(staticValue)](#setstaticstaticvalue) - [update(el, x, y, width, height)](#updateel-x-y-width-height) + - [verticalMargin()](#verticalmargin) - [verticalMargin(value, noUpdate)](#verticalmarginvalue-noupdate) - [willItFit(x, y, width, height, autoPosition)](#willitfitx-y-width-height-autoposition) - [Utils](#utils) @@ -251,9 +252,9 @@ Initializes batch updates. You will see no changes until `commit` method is call Gets current cell height. -### cellHeight(val) +### cellHeight(val, noUpdate) -Update current cell height. This method rebuilds an internal CSS stylesheet. Note: You can expect performance issues if +Update current cell height. This method rebuilds an internal CSS stylesheet (unless optional noUpdate=true). Note: You can expect performance issues if call this method too often. ```javascript @@ -455,6 +456,10 @@ Parameters: Updates widget position/size. +### verticalMargin() + +returns current vertical margin value. + ### verticalMargin(value, noUpdate) Parameters: diff --git a/package.json b/package.json index 88fce70f0..6afb8a599 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.6.0-dev", + "version": "0.5.1", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { @@ -23,7 +23,8 @@ ], "author": "Pavel Reznikov ", "contributors": [ - "Dylan Weiss (https://dylandreams.com)" + "Dylan Weiss (https://dylandreams.com)", + "Alain Dumesny (https://github.com/adumesny)" ], "license": "MIT", "bugs": { diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index e03e6ce9e..25b25f996 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.6.0-dev + * gridstack.js 0.5.0 * http://troolee.github.io/gridstack.js/ * (c) 2014-2017 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.js b/src/gridstack.js index 3eb4efded..9500e59f6 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.6.0-dev + * gridstack.js 0.5.0 * http://troolee.github.io/gridstack.js/ * (c) 2014-2018 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. From 5d8b3f1a2b4810aa0e2ae8a6f152fabf7f661f31 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 7 Nov 2019 11:39:38 -0800 Subject: [PATCH 0034/1298] more npm cleanup * removed bower.json from package --- .npmignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.npmignore b/.npmignore index b7b698270..6c6d53fe7 100644 --- a/.npmignore +++ b/.npmignore @@ -14,6 +14,7 @@ yarn.lock Gruntfile.js ISSUE_TEMPLATE.md PULL_REQUEST_TEMPLATE.md +bower.json freelancer karma.conf.js protractor.conf.js From 46e8d3c3ac8a5159b9235334e316e79e55ae7e39 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 7 Nov 2019 12:18:34 -0800 Subject: [PATCH 0035/1298] Team list update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb44362f8..04bfea44e 100644 --- a/README.md +++ b/README.md @@ -317,4 +317,4 @@ View our change log [here](https://github.com/gridstack/gridstack.js/tree/develo The Team ======== -gridstack.js is currently maintained by [Pavel Reznikov](https://github.com/troolee) and [Dylan Weiss](https://github.com/radiolips). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. +gridstack.js is currently maintained by [Pavel Reznikov](https://github.com/troolee), [Dylan Weiss](https://github.com/radiolips) and [Alain Dumesny](https://github.com/adumesny). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. From 00b45eb544555e50a183dfb572a0eec4224c8294 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 7 Nov 2019 16:42:35 -0800 Subject: [PATCH 0036/1298] undefined x,y position messed up grid fix for #1017 (missing x,y breaks grid), but also a long time issue with autoPlacement=true not respecting DOM order to place items (missing x,y or zero values) (bugged me for a while, so glad to tackle it) * no longer force x,y to be integer up front (get Nan when missing), instead we detect missing and set autoPosition=true. The get fixed soon after. * fixed Utils.defaults() field assignment to check for x=undefined not just missing * fixed code that sorted elements to be created to put autoPosition items last while keeping DOM order. * added karma test cases and UI HTML sample showing complex case - to make sure it doesn't break going forward. * fixed README & others CDN locations to use https:// so we can test them locally. TODO: karma test on HTML file wasn't working, so mine isn't tested either. --- README.md | 6 +- doc/README.md | 5 +- karma.conf.js | 3 +- ...idstack-spec.js => gridstack-html-spec.js} | 17 ++++- .../1017-items-no-x-y-for-autoPosition.html | 76 +++++++++++++++++++ spec/e2e/html/gridstack-with-height.html | 10 +-- spec/utils-spec.js | 13 ++++ src/gridstack.js | 21 +++-- 8 files changed, 131 insertions(+), 20 deletions(-) rename spec/e2e/{gridstack-spec.js => gridstack-html-spec.js} (57%) create mode 100644 spec/e2e/html/1017-items-no-x-y-for-autoPosition.html diff --git a/README.md b/README.md index 04bfea44e..2a8898478 100644 --- a/README.md +++ b/README.md @@ -69,9 +69,9 @@ Usage * Using CDN: ```html - - - + + + ``` * Using bower: diff --git a/doc/README.md b/doc/README.md index 322c21030..8d3525539 100644 --- a/doc/README.md +++ b/doc/README.md @@ -103,14 +103,13 @@ gridstack.js API ## Item attributes -- `data-gs-x`, `data-gs-y` - element position +- `data-gs-x`, `data-gs-y` - element position. Note: if one is missing this will `autoPosition` the item - `data-gs-width`, `data-gs-height` - element size - `data-gs-id`- good for quick identification (for example in change event) - `data-gs-max-width`, `data-gs-min-width`, `data-gs-max-height`, `data-gs-min-height` - element constraints - `data-gs-no-resize` - disable element resizing - `data-gs-no-move` - disable element moving -- `data-gs-auto-position` - tells to ignore `data-gs-x` and `data-gs-y` attributes and to place element to the first - available position +- `data-gs-auto-position` - tells to ignore `data-gs-x` and `data-gs-y` attributes and to place element to the first available position. Having either one missing will also do that. - `data-gs-locked` - the widget will be locked. It means another widget wouldn't be able to move it during dragging or resizing. The widget can still be dragged or resized. You need to add `data-gs-no-resize` and `data-gs-no-move` attributes to completely lock the widget. diff --git a/karma.conf.js b/karma.conf.js index 253cc9f55..1372e321b 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -20,7 +20,8 @@ module.exports = function(config) { 'node_modules/core-js/client/shim.min.js', 'src/gridstack.js', 'src/gridstack.jQueryUI.js', - 'spec/*-spec.js' + 'spec/*-spec.js', + // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined ], diff --git a/spec/e2e/gridstack-spec.js b/spec/e2e/gridstack-html-spec.js similarity index 57% rename from spec/e2e/gridstack-spec.js rename to spec/e2e/gridstack-html-spec.js index 7f3716658..1487b8951 100644 --- a/spec/e2e/gridstack-spec.js +++ b/spec/e2e/gridstack-html-spec.js @@ -7,7 +7,7 @@ describe('gridstack.js with height', function() { browser.get('http://localhost:8080/spec/e2e/html/gridstack-with-height.html'); }); - it('shouldn\'t throw exeption when dragging widget outside the grid', function() { + it('shouldn\'t throw exception when dragging widget outside the grid', function() { var widget = element(by.id('item-1')); var gridContainer = element(by.id('grid')); @@ -22,3 +22,18 @@ describe('gridstack.js with height', function() { }); }); }); + +describe('grid elements with no x,y positions', function() { + beforeAll(function() { + browser.ignoreSynchronization = true; + }); + + beforeEach(function() { + browser.get('http://localhost:8080/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html'); + }); + + it('should match positions in order 5,1,2,4,3', function() { + // TBD + // expect(null).not.toBeNull(); + }); +}); \ No newline at end of file diff --git a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html new file mode 100644 index 000000000..07e0f0f96 --- /dev/null +++ b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
item 1
+
+
+
item 2
+
+
+
item 3 too big to fit, so next row
+
+
+
item 4
+
+
+
item 5 first
+
+
+ + + + + \ No newline at end of file diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index cd0f540b4..d4dce1254 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -10,13 +10,13 @@ gridstack.js tests - + - - - - + + + + diff --git a/spec/utils-spec.js b/spec/utils-spec.js index 0a92c9253..5087662bb 100644 --- a/spec/utils-spec.js +++ b/spec/utils-spec.js @@ -106,4 +106,17 @@ describe('gridstack utils', function() { expect(function() { utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); }); }); + + describe('test defaults', function() { + it('should assign missing field or undefined', function() { + var src = {}; + expect(src).toEqual({}); + expect(utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); + expect(utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); + src.width = undefined; + expect(src).toEqual({x: 1, y: 2, width: undefined}); + expect(utils.defaults(src, {x: 10, width: 3})).toEqual({x: 1, y: 2, width: 3}); + expect(utils.defaults(src, {height: undefined})).toEqual({x: 1, y: 2, width: 3, height: undefined}); + }); + }); }); diff --git a/src/gridstack.js b/src/gridstack.js index 9500e59f6..b0a0d1522 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -141,7 +141,7 @@ sources.forEach(function(source) { for (var prop in source) { - if (source.hasOwnProperty(prop) && !target.hasOwnProperty(prop)) { + if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { target[prop] = source[prop]; } } @@ -393,7 +393,12 @@ }; GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = Utils.defaults(node || {}, {width: 1, height: 1, x: 0, y: 0}); + node = node || {}; + // if we're missing position, have grid position us automatically (before we set them to 0,0) + if (node.x === undefined || node.y === undefined) { + node.autoPosition = true; + } + node = Utils.defaults(node, {width: 1, height: 1, x: 0, y: 0}); node.x = parseInt('' + node.x); node.y = parseInt('' + node.y); @@ -802,11 +807,13 @@ el = $(el); elements.push({ el: el, - i: parseInt(el.attr('data-gs-x')) + parseInt(el.attr('data-gs-y')) * _this.opts.width + // if x,y are missing (autoPosition) add them to end of list - keep their respective DOM order + i: (parseInt(el.attr('data-gs-x')) || 100) + + (parseInt(el.attr('data-gs-y')) || 100) * _this.opts.width }); }); - Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(i) { - this._prepareElement(i.el); + Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(item) { + this._prepareElement(item.el); }, this); } @@ -1388,8 +1395,8 @@ el.addClass(this.opts.itemClass); var node = self.grid.addNode({ - x: parseInt(el.attr('data-gs-x'), 10), - y: parseInt(el.attr('data-gs-y'), 10), + x: el.attr('data-gs-x'), + y: el.attr('data-gs-y'), width: el.attr('data-gs-width'), height: el.attr('data-gs-height'), maxWidth: el.attr('data-gs-max-width'), From b48865ad739cddb2e7403a5d97608a62181ea84a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 8 Nov 2019 08:42:42 -0800 Subject: [PATCH 0037/1298] v0.5.1-dev label, CDN url fix * for CDN switched to cdn.jsdelivr.net which has the latest 0.5.1 images (cdnjs.cloudflare.com does not) --- README.md | 6 +++--- bower.json | 2 +- doc/CHANGES.md | 5 +++++ package.json | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 2a8898478..eb5f1d002 100644 --- a/README.md +++ b/README.md @@ -69,9 +69,9 @@ Usage * Using CDN: ```html - - - + + + ``` * Using bower: diff --git a/bower.json b/bower.json index c0d2abd8d..63051e721 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.1", + "version": "0.5.1-dev", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index c62a23766..df32c3163 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [v0.5.1-dev (work in progress)](#v051-dev-work-in-progress) - [v0.5.1 (2019-11-07)](#v051-2019-11-07) - [v0.5.0 (2019-11-06)](#v050-2019-11-06) - [v0.4.0 (2018-05-11)](#v040-2018-05-11) @@ -20,6 +21,10 @@ Change log +## v0.5.1-dev (work in progress) + +- undefined x,y position messes up grid ([#1017](https://github.com/gridstack/gridstack.js/issues/1017)). + ## v0.5.1 (2019-11-07) - reduced npm package size from 672k to 324k (drop demo, src and extra files) diff --git a/package.json b/package.json index 6afb8a599..cad5acc5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.1", + "version": "0.5.1-dev", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 25b25f996..23598da16 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.0 + * gridstack.js 0.5.1-dev * http://troolee.github.io/gridstack.js/ * (c) 2014-2017 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.js b/src/gridstack.js index b0a0d1522..dd9ed2d25 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.0 + * gridstack.js 0.5.1-dev * http://troolee.github.io/gridstack.js/ * (c) 2014-2018 Pavel Reznikov, Dylan Weiss * gridstack.js may be freely distributed under the MIT license. From 0770665733648c199c5e23cc614bc6215c484357 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 10 Nov 2019 10:12:42 -0800 Subject: [PATCH 0038/1298] change to 2 spaces indent (from 4) * no code change --- .jscsrc | 34 +- Gruntfile.js | 190 +- LICENSE | 2 +- README.md | 52 +- bower.json | 2 +- demo/anijs.html | 134 +- demo/float.html | 132 +- demo/index.html | 26 +- demo/knockout.html | 216 +- demo/knockout2.html | 216 +- demo/nested.html | 118 +- demo/responsive.html | 224 +- doc/CHANGES.md | 1 + doc/README.md | 48 +- karma.conf.js | 130 +- protractor.conf.js | 20 +- spec/e2e/gridstack-html-spec.js | 54 +- .../1017-items-no-x-y-for-autoPosition.html | 112 +- spec/e2e/html/gridstack-with-height.html | 108 +- spec/gridstack-engine-spec.js | 496 +-- spec/gridstack-spec.js | 2436 ++++++------ spec/utils-spec.js | 184 +- src/gridstack-extra.scss | 22 +- src/gridstack.jQueryUI.js | 152 +- src/gridstack.js | 3488 ++++++++--------- src/gridstack.scss | 232 +- 26 files changed, 4415 insertions(+), 4414 deletions(-) diff --git a/.jscsrc b/.jscsrc index 78a426e4c..6f58cbff0 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,19 +1,19 @@ { - "preset": "node-style-guide", - "validateIndentation": 4, - "maximumLineLength": 120, - "jsDoc": { - "checkAnnotations": { - "preset": "jsdoc3", - "extra": { - "preserve": true - } - } - }, - "requireCamelCaseOrUpperCaseIdentifiers": true, - "validateLineBreaks": false, - "requireTrailingComma": false, - "disallowTrailingWhitespace": true, - "requireCapitalizedComments": false, - "excludeFiles": ["dist/*.js", "demo/*", "spec/*"] + "preset": "node-style-guide", + "validateIndentation": 2, + "maximumLineLength": 180, + "jsDoc": { + "checkAnnotations": { + "preset": "jsdoc3", + "extra": { + "preserve": true + } + } + }, + "requireCamelCaseOrUpperCaseIdentifiers": true, + "validateLineBreaks": false, + "requireTrailingComma": false, + "disallowTrailingWhitespace": true, + "requireCapitalizedComments": false, + "excludeFiles": ["dist/*.js", "demo/*", "spec/*"] } diff --git a/Gruntfile.js b/Gruntfile.js index 67b0430e8..c68ce4a82 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,112 +1,112 @@ // jscs:disable requireCamelCaseOrUpperCaseIdentifiers module.exports = function(grunt) { - grunt.loadNpmTasks('grunt-sass'); - grunt.loadNpmTasks('grunt-contrib-cssmin'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-jscs'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-protractor-runner'); - grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-protractor-webdriver'); + grunt.loadNpmTasks('grunt-sass'); + grunt.loadNpmTasks('grunt-contrib-cssmin'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-jscs'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-protractor-runner'); + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-protractor-webdriver'); - grunt.initConfig({ - sass: { - options: { - outputStyle: 'expanded' - }, - dist: { - files: { - 'dist/gridstack.css': 'src/gridstack.scss', - 'dist/gridstack-extra.css': 'src/gridstack-extra.scss' - } - } - }, + grunt.initConfig({ + sass: { + options: { + outputStyle: 'expanded' + }, + dist: { + files: { + 'dist/gridstack.css': 'src/gridstack.scss', + 'dist/gridstack-extra.css': 'src/gridstack-extra.scss' + } + } + }, - cssmin: { - dist: { - files: { - 'dist/gridstack.min.css': ['dist/gridstack.css'], - 'dist/gridstack-extra.min.css': ['dist/gridstack-extra.css'] - } - } - }, + cssmin: { + dist: { + files: { + 'dist/gridstack.min.css': ['dist/gridstack.css'], + 'dist/gridstack-extra.min.css': ['dist/gridstack-extra.css'] + } + } + }, - copy: { - dist: { - files: { - 'dist/gridstack.js': ['src/gridstack.js'], - 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'], - } - } - }, + copy: { + dist: { + files: { + 'dist/gridstack.js': ['src/gridstack.js'], + 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'], + } + } + }, - uglify: { - options: { - sourceMap: true, - sourceMapName: 'dist/gridstack.min.map', - preserveComments: 'some' - }, - dist: { - files: { - 'dist/gridstack.min.js': ['src/gridstack.js'], - 'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'], - 'dist/gridstack.all.js': ['src/gridstack.js', 'src/gridstack.jQueryUI.js'] - } - } - }, + uglify: { + options: { + sourceMap: true, + sourceMapName: 'dist/gridstack.min.map', + preserveComments: 'some' + }, + dist: { + files: { + 'dist/gridstack.min.js': ['src/gridstack.js'], + 'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'], + 'dist/gridstack.all.js': ['src/gridstack.js', 'src/gridstack.jQueryUI.js'] + } + } + }, - jshint: { - all: ['src/*.js'] - }, + jshint: { + all: ['src/*.js'] + }, - jscs: { - all: ['*.js', 'src/*.js', ], - }, + jscs: { + all: ['*.js', 'src/*.js', ], + }, - watch: { - scripts: { - files: ['src/*.js'], - tasks: ['uglify', 'copy'], - options: { - }, - }, - styles: { - files: ['src/*.scss'], - tasks: ['sass', 'cssmin'], - options: { - }, - } + watch: { + scripts: { + files: ['src/*.js'], + tasks: ['uglify', 'copy'], + options: { }, - - protractor: { - options: { - configFile: 'protractor.conf.js', - }, - all: {} + }, + styles: { + files: ['src/*.scss'], + tasks: ['sass', 'cssmin'], + options: { }, + } + }, + + protractor: { + options: { + configFile: 'protractor.conf.js', + }, + all: {} + }, - connect: { - all: { - options: { - port: 8080, - hostname: 'localhost', - base: '.', - }, - }, + connect: { + all: { + options: { + port: 8080, + hostname: 'localhost', + base: '.', }, + }, + }, - protractor_webdriver: { - all: { - options: { - command: 'webdriver-manager start', - } - } + protractor_webdriver: { + all: { + options: { + command: 'webdriver-manager start', } - }); + } + } + }); - grunt.registerTask('lint', ['jshint', 'jscs']); - grunt.registerTask('default', ['sass', 'cssmin', 'jshint', 'jscs', 'copy', 'uglify']); - grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']); + grunt.registerTask('lint', ['jshint', 'jscs']); + grunt.registerTask('default', ['sass', 'cssmin', 'jshint', 'jscs', 'copy', 'uglify']); + grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']); }; diff --git a/LICENSE b/LICENSE index d8ca1d3a7..ac638850b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2017 Pavel Reznikov, Dylan Weiss +Copyright (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index eb5f1d002..6e0501009 100644 --- a/README.md +++ b/README.md @@ -94,21 +94,21 @@ You can download source and build and use `dist` directory as well for latest no ```html
-
-
-
-
-
-
+
+
+
+
+
+
``` @@ -157,10 +157,10 @@ Also `alwaysShowResizeHandle` option may be useful: ```javascript $(function () { - var options = { - alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) - }; - $('.grid-stack').gridstack(options); + var options = { + alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) + }; + $('.grid-stack').gridstack(options); }); ``` @@ -210,14 +210,14 @@ Here is a SASS code snippet which can make life easier (Thanks to @ascendantofra ```sass .grid-stack > .grid-stack-item { - $gridstack-columns: 12; + $gridstack-columns: 12; - @for $i from 1 through $gridstack-columns { - &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } - &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } - &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } - &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } - } + @for $i from 1 through $gridstack-columns { + &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } + &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } + &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } + &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } + } } ``` @@ -247,9 +247,9 @@ you can init gridstack like: ```javascript $('.grid-stack').gridstack({ - resizable: { - handles: 'e, se, s, sw, w' - } + resizable: { + handles: 'e, se, s, sw, w' + } }); ``` @@ -317,4 +317,4 @@ View our change log [here](https://github.com/gridstack/gridstack.js/tree/develo The Team ======== -gridstack.js is currently maintained by [Pavel Reznikov](https://github.com/troolee), [Dylan Weiss](https://github.com/radiolips) and [Alain Dumesny](https://github.com/adumesny). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. +gridstack.js is currently maintained by [Dylan Weiss](https://github.com/radiolips) and [Alain Dumesny](https://github.com/adumesny), originally created by [Pavel Reznikov](https://github.com/troolee). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. diff --git a/bower.json b/bower.json index 63051e721..370bafef5 100644 --- a/bower.json +++ b/bower.json @@ -34,4 +34,4 @@ "test", "tests" ] -} +} \ No newline at end of file diff --git a/demo/anijs.html b/demo/anijs.html index d4222cf9e..32a1aadae 100644 --- a/demo/anijs.html +++ b/demo/anijs.html @@ -1,89 +1,89 @@ - + - - - - AniJS demo + + + + AniJS demo - - - + + + - - - - - - + + + + + + - + .grid-stack-item-content { + color: #2c3e50; + text-align: center; + background-color: #18bc9c; + } + -
-

AniJS demo

+
+

AniJS demo

- + -
-

Widget added

-
+
+

Widget added

+
-
+
-
-
+
+
- - + + //Defining removeAnimations to remove existing animations + animationHelper.removeAnimations = function(e, animationContext){ + $('.grid-stack-item').attr('data-anijs', ''); + }; + }); + diff --git a/demo/float.html b/demo/float.html index 774178dd8..3a215562f 100644 --- a/demo/float.html +++ b/demo/float.html @@ -1,88 +1,88 @@ - + - - - - Float grid demo + + + + Float grid demo - - + + - - - - - - + + + + + + - + .grid-stack-item-content { + color: #2c3e50; + text-align: center; + background-color: #18bc9c; + } + -
-

Float grid demo

+
+

Float grid demo

- + -
+
-
-
+
+
- + $('#add-new-widget').click(this.addNewWidget); + }; + }); + diff --git a/demo/index.html b/demo/index.html index dbcc88798..b2b97bae3 100644 --- a/demo/index.html +++ b/demo/index.html @@ -1,20 +1,20 @@ - - Demo + + Demo - + diff --git a/demo/knockout.html b/demo/knockout.html index c15728558..2eaf23215 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -1,122 +1,122 @@ - - - - - - Knockout.js demo - - - - - - - - - - - - - + + + + + + Knockout.js demo + + + + + + + + + + + + + -
-

knockout.js Demo

+
+

knockout.js Demo

-
- -
+
+ +
-
+
-
-
+
+
- + return new ViewModel(controller, componentInfo); + } + }, + template: + [ + '
', + '
', + '
', + '
', + '
' + ].join('') + }); + + $(function () { + var Controller = function (widgets) { + var self = this; + + this.widgets = ko.observableArray(widgets); + + this.addNewWidget = function () { + this.widgets.push({ + x: 0, + y: 0, + width: Math.floor(1 + 3 * Math.random()), + height: Math.floor(1 + 3 * Math.random()), + auto_position: true + }); + return false; + }; + + this.deleteWidget = function (item) { + self.widgets.remove(item); + return false; + }; + }; + + var widgets = [ + {x: 0, y: 0, width: 2, height: 2}, + {x: 2, y: 0, width: 4, height: 2}, + {x: 6, y: 0, width: 2, height: 4}, + {x: 1, y: 2, width: 4, height: 2} + ]; + + var controller = new Controller(widgets); + ko.applyBindings(controller); + }); + diff --git a/demo/knockout2.html b/demo/knockout2.html index 227d1da19..e638235b1 100644 --- a/demo/knockout2.html +++ b/demo/knockout2.html @@ -1,122 +1,122 @@ - - - - - - Knockout.js demo - - - - - - - - - - - - - + + + + + + Knockout.js demo + + + + + + + + + + + + + -
-

knockout.js Demo

+
+

knockout.js Demo

-
- -
+
+ +
-
+
-
-
+
+
- - - + return new ViewModel(controller, componentInfo); + } + }, + template: { element: 'gridstack-template' } + }); + + $(function () { + var Controller = function (widgets) { + var self = this; + + this.widgets = ko.observableArray(widgets); + + this.addNewWidget = function () { + this.widgets.push({ + x: 0, + y: 0, + width: Math.floor(1 + 3 * Math.random()), + height: Math.floor(1 + 3 * Math.random()), + auto_position: true + }); + return false; + }; + + this.deleteWidget = function (item) { + self.widgets.remove(item); + return false; + }; + }; + + var widgets = [ + {x: 0, y: 0, width: 2, height: 2}, + {x: 2, y: 0, width: 4, height: 2}, + {x: 6, y: 0, width: 2, height: 4}, + {x: 1, y: 2, width: 4, height: 2} + ]; + + var controller = new Controller(widgets); + ko.applyBindings(controller); + }); + + + diff --git a/demo/nested.html b/demo/nested.html index 5d27d8c77..64d01271c 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -1,81 +1,81 @@ - + - - - - Nested grids demo + + + + Nested grids demo - - + + - - - - - - + + + + + + - + .grid-stack .grid-stack .grid-stack-item-content { + background: lightpink; + } + -
-

Nested grids demo

+
+

Nested grids demo

-
-
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eaque eius eligendi eos fuga magnam numquam perferendis provident quos rem. Asperiores assumenda dolor error eveniet impedit nihil numquam provident repellat ullam. -
-
-
-
- -
-
1
-
2
-
3
-
4
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eaque eius eligendi eos fuga magnam numquam perferendis provident quos rem. Asperiores assumenda dolor error eveniet impedit nihil numquam provident repellat ullam. +
+
+
+
-
5
-
6
-
+
+
1
+
2
+
3
+
4
-
+
5
+
6
+
+
+
- + diff --git a/demo/responsive.html b/demo/responsive.html index c5b1a7a8e..c6c491b33 100644 --- a/demo/responsive.html +++ b/demo/responsive.html @@ -1,122 +1,122 @@ - - - - - - Responsive grid demo - - - - - - - - - - - - - + + + + + + Responsive grid demo + + + + + + + + + + + + + -
-
-
-
-
-
-

Responsive grid demo

- -
- Number of Columns: -
- -
- -
-
+
+
+
+
+
+
+

Responsive grid demo

+ +
+ Number of Columns:
+
- +
+
+
+ + + diff --git a/doc/CHANGES.md b/doc/CHANGES.md index df32c3163..96912de87 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -24,6 +24,7 @@ Change log ## v0.5.1-dev (work in progress) - undefined x,y position messes up grid ([#1017](https://github.com/gridstack/gridstack.js/issues/1017)). +- changed code to 2 spaces ## v0.5.1 (2019-11-07) diff --git a/doc/README.md b/doc/README.md index 8d3525539..4d248b4b1 100644 --- a/doc/README.md +++ b/doc/README.md @@ -62,7 +62,7 @@ gridstack.js API - `acceptWidgets` - if `true` of jquery selector the grid will accept widgets dragged from other grids or from outside (default: `false`) See [example](http://gridstackjs.com/demo/two.html) - `alwaysShowResizeHandle` - if `true` the resizing handles are shown even if the user is not hovering over the widget - (default: `false`) + (default: `false`) - `animate` - turns animation on (default: `false`) - `auto` - if `false` gridstack will not initialize existing items (default: `true`) - `cellHeight` - one cell height (default: `60`). Can be: @@ -121,10 +121,10 @@ to completely lock the widget. ```javascript $('.grid-stack').on('added', function(event, items) { - for (var i = 0; i < items.length; i++) { - console.log('item added'); - console.log(items[i]); - } + for (var i = 0; i < items.length; i++) { + console.log('item added'); + console.log(items[i]); + } }); ``` @@ -134,11 +134,11 @@ Occurs when adding/removing widgets or existing widgets change their position/si ```javascript var serializeWidgetMap = function(items) { - console.log(items); + console.log(items); }; $('.grid-stack').on('change', function(event, items) { - serializeWidgetMap(items); + serializeWidgetMap(items); }); ``` @@ -146,7 +146,7 @@ $('.grid-stack').on('change', function(event, items) { ```javascript $('.grid-stack').on('disable', function(event) { - var grid = event.target; + var grid = event.target; }); ``` @@ -154,8 +154,8 @@ $('.grid-stack').on('disable', function(event) { ```javascript $('.grid-stack').on('dragstart', function(event, ui) { - var grid = this; - var element = event.target; + var grid = this; + var element = event.target; }); ``` @@ -163,8 +163,8 @@ $('.grid-stack').on('dragstart', function(event, ui) { ```javascript $('.grid-stack').on('dragstop', function(event, ui) { - var grid = this; - var element = event.target; + var grid = this; + var element = event.target; }); ``` @@ -172,8 +172,8 @@ $('.grid-stack').on('dragstop', function(event, ui) { ```javascript $('.grid-stack').on('dropped', function(event, previousWidget, newWidget) { - console.log('Removed widget that was dragged out of grid:', previousWidget); - console.log('Added widget in dropped grid:', newWidget); + console.log('Removed widget that was dragged out of grid:', previousWidget); + console.log('Added widget in dropped grid:', newWidget); }); ``` @@ -181,7 +181,7 @@ $('.grid-stack').on('dropped', function(event, previousWidget, newWidget) { ```javascript $('.grid-stack').on('enable', function(event) { - var grid = event.target; + var grid = event.target; }); ``` @@ -189,10 +189,10 @@ $('.grid-stack').on('enable', function(event) { ```javascript $('.grid-stack').on('removed', function(event, items) { - for (var i = 0; i < items.length; i++) { - console.log('item removed'); - console.log(items[i]); - } + for (var i = 0; i < items.length; i++) { + console.log('item removed'); + console.log(items[i]); + } }); ``` @@ -200,8 +200,8 @@ $('.grid-stack').on('removed', function(event, items) { ```javascript $('.grid-stack').on('resizestart', function(event, ui) { - var grid = this; - var element = event.target; + var grid = this; + var element = event.target; }); ``` @@ -211,7 +211,7 @@ $('.grid-stack').on('resizestart', function(event, ui) { ```javascript $('.grid-stack').on('gsresizestop', function(event, elem) { - var newHeight = $(elem).attr('data-gs-height'); + var newHeight = $(elem).attr('data-gs-height'); }); ``` @@ -473,10 +473,10 @@ have `height` constraint. ```javascript if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) { - grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); + grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); } else { - alert('Not enough free space to place the widget'); + alert('Not enough free space to place the widget'); } ``` diff --git a/karma.conf.js b/karma.conf.js index 1372e321b..c40e167eb 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -2,94 +2,94 @@ // Generated on Thu Feb 18 2016 22:00:23 GMT+0100 (CET) module.exports = function(config) { - config.set({ + config.set({ - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: '', + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine'], + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], - // list of files / patterns to load in the browser - files: [ - 'node_modules/jquery/dist/jquery.min.js', - 'node_modules/components-jqueryui/jquery-ui.min.js', - 'node_modules/core-js/client/shim.min.js', - 'src/gridstack.js', - 'src/gridstack.jQueryUI.js', - 'spec/*-spec.js', - // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined - ], + // list of files / patterns to load in the browser + files: [ + 'node_modules/jquery/dist/jquery.min.js', + 'node_modules/components-jqueryui/jquery-ui.min.js', + 'node_modules/core-js/client/shim.min.js', + 'src/gridstack.js', + 'src/gridstack.jQueryUI.js', + 'spec/*-spec.js', + // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined + ], - // list of files to exclude - exclude: [ - ], + // list of files to exclude + exclude: [ + ], - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - 'src/gridstack.js': ['coverage'], - 'src/gridstack.jQueryUI.js': ['coverage'] - }, + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + 'src/gridstack.js': ['coverage'], + 'src/gridstack.jQueryUI.js': ['coverage'] + }, - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'coverage', 'coveralls'], + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress', 'coverage', 'coveralls'], - coverageReporter: { - type: 'lcov', // lcov or lcovonly are required for generating lcov.info files - dir: 'coverage/' - }, + coverageReporter: { + type: 'lcov', // lcov or lcovonly are required for generating lcov.info files + dir: 'coverage/' + }, - // web server port - port: 9876, + // web server port + port: 9876, - // enable / disable colors in the output (reporters and logs) - colors: true, + // enable / disable colors in the output (reporters and logs) + colors: true, - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN - // config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN + // config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_INFO, - // enable / disable watching file and executing tests whenever any file changes - autoWatch: true, + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['ChromeHeadlessCustom'], - customLaunchers: { - ChromeHeadlessCustom: { - base: 'ChromeHeadless', - flags: ['--window-size=800,600'] - } - }, + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['ChromeHeadlessCustom'], + customLaunchers: { + ChromeHeadlessCustom: { + base: 'ChromeHeadless', + flags: ['--window-size=800,600'] + } + }, - // Continuous Integration mode - // if true, Karma captures browsers, runs the tests and exits - singleRun: true, + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true, - // Concurrency level - // how many browser should be started simultaneous - concurrency: Infinity, + // Concurrency level + // how many browser should be started simultaneous + concurrency: Infinity, - random: false, + random: false, - client: { - jasmine: { - random: false - } - } - }); + client: { + jasmine: { + random: false + } + } + }); }; diff --git a/protractor.conf.js b/protractor.conf.js index edcc3f40e..6b9b2091f 100644 --- a/protractor.conf.js +++ b/protractor.conf.js @@ -1,12 +1,12 @@ exports.config = { - seleniumAddress: 'http://localhost:4444/wd/hub', - specs: ['spec/e2e/*-spec.js'], - capabilities: { - browserName: 'firefox', - version: '', - platform: 'ANY', - loggingPrefs: { - browser: 'SEVERE' - } - }, + seleniumAddress: 'http://localhost:4444/wd/hub', + specs: ['spec/e2e/*-spec.js'], + capabilities: { + browserName: 'firefox', + version: '', + platform: 'ANY', + loggingPrefs: { + browser: 'SEVERE' + } + }, }; diff --git a/spec/e2e/gridstack-html-spec.js b/spec/e2e/gridstack-html-spec.js index 1487b8951..bcc52fe85 100644 --- a/spec/e2e/gridstack-html-spec.js +++ b/spec/e2e/gridstack-html-spec.js @@ -1,39 +1,39 @@ describe('gridstack.js with height', function() { - beforeAll(function() { - browser.ignoreSynchronization = true; - }); + beforeAll(function() { + browser.ignoreSynchronization = true; + }); - beforeEach(function() { - browser.get('http://localhost:8080/spec/e2e/html/gridstack-with-height.html'); - }); + beforeEach(function() { + browser.get('http://localhost:8080/spec/e2e/html/gridstack-with-height.html'); + }); - it('shouldn\'t throw exception when dragging widget outside the grid', function() { - var widget = element(by.id('item-1')); - var gridContainer = element(by.id('grid')); + it('shouldn\'t throw exception when dragging widget outside the grid', function() { + var widget = element(by.id('item-1')); + var gridContainer = element(by.id('grid')); - browser.actions() - .mouseDown(widget, {x: 20, y: 20}) - .mouseMove(gridContainer, {x: 300, y: 20}) - .mouseUp() - .perform(); + browser.actions() + .mouseDown(widget, {x: 20, y: 20}) + .mouseMove(gridContainer, {x: 300, y: 20}) + .mouseUp() + .perform(); - browser.manage().logs().get('browser').then(function(browserLog) { - expect(browserLog.length).toEqual(0); - }); + browser.manage().logs().get('browser').then(function(browserLog) { + expect(browserLog.length).toEqual(0); }); + }); }); describe('grid elements with no x,y positions', function() { - beforeAll(function() { - browser.ignoreSynchronization = true; - }); + beforeAll(function() { + browser.ignoreSynchronization = true; + }); - beforeEach(function() { - browser.get('http://localhost:8080/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html'); - }); + beforeEach(function() { + browser.get('http://localhost:8080/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html'); + }); - it('should match positions in order 5,1,2,4,3', function() { - // TBD - // expect(null).not.toBeNull(); - }); + it('should match positions in order 5,1,2,4,3', function() { + // TBD + // expect(null).not.toBeNull(); + }); }); \ No newline at end of file diff --git a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html index 07e0f0f96..e640feb55 100644 --- a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html +++ b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html @@ -1,76 +1,76 @@ - + - - - + + + - - + + - - - - - - + + + + + + - + .upper .grid-stack-item-content { + background: blue; + } + -
-
-
item 1
-
-
-
item 2
-
-
-
item 3 too big to fit, so next row
-
-
-
item 4
-
-
-
item 5 first
-
+
+
+
item 1
+
+
item 2
+
+
+
item 3 too big to fit, so next row
+
+
+
item 4
+
+
+
item 5 first
+
+
- + \ No newline at end of file diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index d4dce1254..4836590df 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -1,73 +1,73 @@ - + - - - - gridstack.js tests + + + + gridstack.js tests - - + + - - - - - - + + + + + + - + .grid-stack-item-content { + color: #2c3e50; + text-align: center; + background-color: #18bc9c; + } + -
-

gridstack.js tests

+
+

gridstack.js tests

-
+
-
-
+
+
- + this.grid = $('.grid-stack').data('gridstack'); + this.grid.removeAll(); + items = GridStackUI.Utils.sort(items); + var id = 0; + items.forEach(function(node) { + var w = $('
'); + w.attr('id', 'item-' + (++id)); + this.grid.addWidget(w, + node.x, node.y, node.width, node.height); + }, this); + }; + }); + diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index 67e4785a4..97f16dd3d 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -1,311 +1,311 @@ describe('gridstack engine', function() { - 'use strict'; + 'use strict'; - var e; - var w; + var e; + var w; - beforeEach(function() { - w = window; - e = w.GridStackUI.Engine; + beforeEach(function() { + w = window; + e = w.GridStackUI.Engine; + }); + + describe('test constructor', function() { + var engine; + + beforeAll(function() { + engine = new GridStackUI.Engine(12); }); - describe('test constructor', function() { - var engine; + it('should be setup properly', function() { + expect(engine.width).toEqual(12); + expect(engine.float).toEqual(false); + expect(engine.height).toEqual(0); + expect(engine.nodes).toEqual([]); + }); + }); - beforeAll(function() { - engine = new GridStackUI.Engine(12); - }); + describe('test _prepareNode', function() { + var engine; - it('should be setup properly', function() { - expect(engine.width).toEqual(12); - expect(engine.float).toEqual(false); - expect(engine.height).toEqual(0); - expect(engine.nodes).toEqual([]); - }); + beforeAll(function() { + engine = new GridStackUI.Engine(12); }); - describe('test _prepareNode', function() { - var engine; - - beforeAll(function() { - engine = new GridStackUI.Engine(12); - }); - - it('should prepare a node', function() { - expect(engine._prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({x: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({y: 10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 10, width: 1, height: 1})); - expect(engine._prepareNode({y: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({width: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 3, height: 1})); - expect(engine._prepareNode({width: 100}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 12, height: 1})); - expect(engine._prepareNode({width: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({width: -190}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({height: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 3})); - expect(engine._prepareNode({height: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({height: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(engine._prepareNode({x: 4, width: 10}, false)).toEqual(jasmine.objectContaining({x: 2, y: 0, width: 10, height: 1})); - expect(engine._prepareNode({x: 4, width: 10}, true)).toEqual(jasmine.objectContaining({x: 4, y: 0, width: 8, height: 1})); - }); + it('should prepare a node', function() { + expect(engine._prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({x: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({y: 10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 10, width: 1, height: 1})); + expect(engine._prepareNode({y: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({width: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 3, height: 1})); + expect(engine._prepareNode({width: 100}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 12, height: 1})); + expect(engine._prepareNode({width: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({width: -190}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({height: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 3})); + expect(engine._prepareNode({height: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({height: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(engine._prepareNode({x: 4, width: 10}, false)).toEqual(jasmine.objectContaining({x: 2, y: 0, width: 10, height: 1})); + expect(engine._prepareNode({x: 4, width: 10}, true)).toEqual(jasmine.objectContaining({x: 4, y: 0, width: 8, height: 1})); }); + }); - describe('test isAreaEmpty', function() { - var engine; - - beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); - engine.nodes = [ - engine._prepareNode({x: 3, y: 2, width: 3, height: 2}) - ]; - }); - - it('should be true', function() { - expect(engine.isAreaEmpty(0, 0, 3, 2)).toEqual(true); - expect(engine.isAreaEmpty(3, 4, 3, 2)).toEqual(true); - }); - - it('should be false', function() { - expect(engine.isAreaEmpty(1, 1, 3, 2)).toEqual(false); - expect(engine.isAreaEmpty(2, 3, 3, 2)).toEqual(false); - }); + describe('test isAreaEmpty', function() { + var engine; + + beforeAll(function() { + engine = new GridStackUI.Engine(12, null, true); + engine.nodes = [ + engine._prepareNode({x: 3, y: 2, width: 3, height: 2}) + ]; }); - describe('test cleanNodes/getDirtyNodes', function() { - var engine; + it('should be true', function() { + expect(engine.isAreaEmpty(0, 0, 3, 2)).toEqual(true); + expect(engine.isAreaEmpty(3, 4, 3, 2)).toEqual(true); + }); - beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); - engine.nodes = [ - engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), - engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), - engine._prepareNode({x: 3, y: 7, width: 3, height: 2, idx: 3}) - ]; - }); + it('should be false', function() { + expect(engine.isAreaEmpty(1, 1, 3, 2)).toEqual(false); + expect(engine.isAreaEmpty(2, 3, 3, 2)).toEqual(false); + }); + }); + + describe('test cleanNodes/getDirtyNodes', function() { + var engine; + + beforeAll(function() { + engine = new GridStackUI.Engine(12, null, true); + engine.nodes = [ + engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), + engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), + engine._prepareNode({x: 3, y: 7, width: 3, height: 2, idx: 3}) + ]; + }); - beforeEach(function() { - engine._updateCounter = 0; - }); + beforeEach(function() { + engine._updateCounter = 0; + }); - it('should return all dirty nodes', function() { - var nodes = engine.getDirtyNodes(); + it('should return all dirty nodes', function() { + var nodes = engine.getDirtyNodes(); - expect(nodes.length).toEqual(2); - expect(nodes[0].idx).toEqual(1); - expect(nodes[1].idx).toEqual(2); - }); + expect(nodes.length).toEqual(2); + expect(nodes[0].idx).toEqual(1); + expect(nodes[1].idx).toEqual(2); + }); - it('should\'n clean nodes if _updateCounter > 0', function() { - engine._updateCounter = 1; - engine.cleanNodes(); + it('should\'n clean nodes if _updateCounter > 0', function() { + engine._updateCounter = 1; + engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toBeGreaterThan(0); - }); + expect(engine.getDirtyNodes().length).toBeGreaterThan(0); + }); - it('should clean all dirty nodes', function() { - engine.cleanNodes(); + it('should clean all dirty nodes', function() { + engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toEqual(0); - }); + expect(engine.getDirtyNodes().length).toEqual(0); }); + }); - describe('test batchUpdate/commit', function() { - var engine; - - beforeAll(function() { - engine = new GridStackUI.Engine(12); - }); - - it('should work on not float grids', function() { - expect(engine.float).toEqual(false); - engine.batchUpdate(); - expect(engine._updateCounter).toBeGreaterThan(0); - expect(engine.float).toEqual(true); - engine.commit(); - expect(engine._updateCounter).toEqual(0); - expect(engine.float).toEqual(false); - }); + describe('test batchUpdate/commit', function() { + var engine; + + beforeAll(function() { + engine = new GridStackUI.Engine(12); }); - describe('test batchUpdate/commit', function() { - var engine; - - beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); - }); - - it('should work on float grids', function() { - expect(engine.float).toEqual(true); - engine.batchUpdate(); - expect(engine._updateCounter).toBeGreaterThan(0); - expect(engine.float).toEqual(true); - engine.commit(); - expect(engine._updateCounter).toEqual(0); - expect(engine.float).toEqual(true); - }); + it('should work on not float grids', function() { + expect(engine.float).toEqual(false); + engine.batchUpdate(); + expect(engine._updateCounter).toBeGreaterThan(0); + expect(engine.float).toEqual(true); + engine.commit(); + expect(engine._updateCounter).toEqual(0); + expect(engine.float).toEqual(false); }); + }); + + describe('test batchUpdate/commit', function() { + var engine; - describe('test _notify', function() { - var engine; - var spy; + beforeAll(function() { + engine = new GridStackUI.Engine(12, null, true); + }); - beforeEach(function() { - spy = { - callback: function() {} - }; - spyOn(spy, 'callback'); + it('should work on float grids', function() { + expect(engine.float).toEqual(true); + engine.batchUpdate(); + expect(engine._updateCounter).toBeGreaterThan(0); + expect(engine.float).toEqual(true); + engine.commit(); + expect(engine._updateCounter).toEqual(0); + expect(engine.float).toEqual(true); + }); + }); - engine = new GridStackUI.Engine(12, spy.callback, true); + describe('test _notify', function() { + var engine; + var spy; - engine.nodes = [ - engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), - engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), - engine._prepareNode({x: 3, y: 7, width: 3, height: 2, idx: 3}) - ]; - }); + beforeEach(function() { + spy = { + callback: function() {} + }; + spyOn(spy, 'callback'); + + engine = new GridStackUI.Engine(12, spy.callback, true); + + engine.nodes = [ + engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), + engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), + engine._prepareNode({x: 3, y: 7, width: 3, height: 2, idx: 3}) + ]; + }); - it('should\'n be called if _updateCounter > 0', function() { - engine._updateCounter = 1; - engine._notify(); + it('should\'n be called if _updateCounter > 0', function() { + engine._updateCounter = 1; + engine._notify(); - expect(spy.callback).not.toHaveBeenCalled(); - }); + expect(spy.callback).not.toHaveBeenCalled(); + }); - it('should by called with dirty nodes', function() { - engine._notify(); + it('should by called with dirty nodes', function() { + engine._notify(); - expect(spy.callback).toHaveBeenCalledWith([ - engine.nodes[0], - engine.nodes[1] - ], true); - }); + expect(spy.callback).toHaveBeenCalledWith([ + engine.nodes[0], + engine.nodes[1] + ], true); + }); - it('should by called with extra passed node to be removed', function() { - var n1 = {idx: -1}; + it('should by called with extra passed node to be removed', function() { + var n1 = {idx: -1}; - engine._notify(n1); + engine._notify(n1); - expect(spy.callback).toHaveBeenCalledWith([ - n1, - engine.nodes[0], - engine.nodes[1] - ], true); - }); + expect(spy.callback).toHaveBeenCalledWith([ + n1, + engine.nodes[0], + engine.nodes[1] + ], true); + }); - it('should by called with extra passed node to be removed and should maintain false parameter', function() { - var n1 = {idx: -1}; + it('should by called with extra passed node to be removed and should maintain false parameter', function() { + var n1 = {idx: -1}; - engine._notify(n1, false); + engine._notify(n1, false); - expect(spy.callback).toHaveBeenCalledWith([ - n1, - engine.nodes[0], - engine.nodes[1] - ], false); - }); + expect(spy.callback).toHaveBeenCalledWith([ + n1, + engine.nodes[0], + engine.nodes[1] + ], false); }); + }); + + describe('test _packNodes', function() { + describe('using not float mode', function() { + var engine; + + var findNode = function(engine, id) { + return engine.nodes.find(function(i) { return i._id === id; }); + }; + + beforeEach(function() { + engine = new GridStackUI.Engine(12, null, false); + }); - describe('test _packNodes', function() { - describe('using not float mode', function() { - var engine; + it('shouldn\'t pack one node with y coord eq 0', function() { + engine.nodes = [ + {x: 0, y: 0, width: 1, height: 1, _id: 1}, + ]; - var findNode = function(engine, id) { - return engine.nodes.find(function(i) { return i._id === id; }); - }; + engine._packNodes(); - beforeEach(function() { - engine = new GridStackUI.Engine(12, null, false); - }); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); + expect(findNode(engine, 1)._dirty).toBeFalsy(); + }); - it('shouldn\'t pack one node with y coord eq 0', function() { - engine.nodes = [ - {x: 0, y: 0, width: 1, height: 1, _id: 1}, - ]; + it('should pack one node correctly', function() { + engine.nodes = [ + {x: 0, y: 1, width: 1, height: 1, _id: 1}, + ]; - engine._packNodes(); + engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); - expect(findNode(engine, 1)._dirty).toBeFalsy(); - }); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); + }); - it('should pack one node correctly', function() { - engine.nodes = [ - {x: 0, y: 1, width: 1, height: 1, _id: 1}, - ]; + it('should pack nodes correctly', function() { + engine.nodes = [ + {x: 0, y: 1, width: 1, height: 1, _id: 1}, + {x: 0, y: 5, width: 1, height: 1, _id: 2}, + ]; - engine._packNodes(); + engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); - }); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); + }); - it('should pack nodes correctly', function() { - engine.nodes = [ - {x: 0, y: 1, width: 1, height: 1, _id: 1}, - {x: 0, y: 5, width: 1, height: 1, _id: 2}, - ]; + it('should pack nodes correctly', function() { + engine.nodes = [ + {x: 0, y: 5, width: 1, height: 1, _id: 1}, + {x: 0, y: 1, width: 1, height: 1, _id: 2}, + ]; - engine._packNodes(); + engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); - }); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); + }); - it('should pack nodes correctly', function() { - engine.nodes = [ - {x: 0, y: 5, width: 1, height: 1, _id: 1}, - {x: 0, y: 1, width: 1, height: 1, _id: 2}, - ]; + it('should respect locked nodes', function() { + engine.nodes = [ + {x: 0, y: 1, width: 1, height: 1, _id: 1, locked: true}, + {x: 0, y: 5, width: 1, height: 1, _id: 2}, + ]; - engine._packNodes(); + engine._packNodes(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); - }); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1})); + expect(findNode(engine, 1)._dirty).toBeFalsy(); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, width: 1, height: 1, _dirty: true})); + }); + }); + }); + + describe('test isNodeChangedPosition', function() { + var engine; + + beforeAll(function() { + engine = new GridStackUI.Engine(12); + }); - it('should respect locked nodes', function() { - engine.nodes = [ - {x: 0, y: 1, width: 1, height: 1, _id: 1, locked: true}, - {x: 0, y: 5, width: 1, height: 1, _id: 2}, - ]; + it('should return true for changed x', function() { + var widget = { x: 1, y: 2, width: 3, height: 4 }; + expect(engine.isNodeChangedPosition(widget, 2, 2)).toEqual(true); + }); + + it('should return true for changed y', function() { + var widget = { x: 1, y: 2, width: 3, height: 4 }; + expect(engine.isNodeChangedPosition(widget, 1, 1)).toEqual(true); + }); - engine._packNodes(); + it('should return true for changed width', function() { + var widget = { x: 1, y: 2, width: 3, height: 4 }; + expect(engine.isNodeChangedPosition(widget, 2, 2, 4, 4)).toEqual(true); + }); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1})); - expect(findNode(engine, 1)._dirty).toBeFalsy(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, width: 1, height: 1, _dirty: true})); - }); - }); + it('should return true for changed height', function() { + var widget = { x: 1, y: 2, width: 3, height: 4 }; + expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 3)).toEqual(true); }); - describe('test isNodeChangedPosition', function() { - var engine; - - beforeAll(function() { - engine = new GridStackUI.Engine(12); - }); - - it('should return true for changed x', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; - expect(engine.isNodeChangedPosition(widget, 2, 2)).toEqual(true); - }); - - it('should return true for changed y', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; - expect(engine.isNodeChangedPosition(widget, 1, 1)).toEqual(true); - }); - - it('should return true for changed width', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; - expect(engine.isNodeChangedPosition(widget, 2, 2, 4, 4)).toEqual(true); - }); - - it('should return true for changed height', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; - expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 3)).toEqual(true); - }); - - it('should return false for unchanged position', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; - expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 4)).toEqual(false); - }); + it('should return false for unchanged position', function() { + var widget = { x: 1, y: 2, width: 3, height: 4 }; + expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 4)).toEqual(false); }); + }); }); diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index cd6f6d532..aa942588e 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -1,1304 +1,1304 @@ describe('gridstack', function() { - 'use strict'; + 'use strict'; - var e; - var w; - var gridstackHTML = - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
' + - '
'; + var e; + var w; + var gridstackHTML = + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
' + + '
'; - beforeEach(function() { - w = window; - e = w.GridStackUI.Engine; - }); - - describe('setup of gridstack', function() { + beforeEach(function() { + w = window; + e = w.GridStackUI.Engine; + }); - it('should exist setup function.', function() { + describe('setup of gridstack', function() { - expect(e).not.toBeNull(); - expect(typeof e).toBe('function'); - }); + it('should exist setup function.', function() { - it('should set default params correctly.', function() { - e.call(w); - expect(w.width).toBeUndefined(); - expect(w.float).toBe(false); - expect(w.height).toEqual(0); - expect(w.nodes).toEqual([]); - expect(typeof w.onchange).toBe('function'); - expect(w._updateCounter).toEqual(0); - expect(w._float).toEqual(w.float); - }); - - it('should set params correctly.', function() { - var fkt = function() { }; - var arr = [1,2,3]; + expect(e).not.toBeNull(); + expect(typeof e).toBe('function'); + }); - e.call(w, 1, fkt, true, 2, arr); - expect(w.width).toEqual(1); - expect(w.float).toBe(true); - expect(w.height).toEqual(2); - expect(w.nodes).toEqual(arr); - expect(w.onchange).toEqual(fkt); - expect(w._updateCounter).toEqual(0); - expect(w._float).toEqual(w.float); - }); + it('should set default params correctly.', function() { + e.call(w); + expect(w.width).toBeUndefined(); + expect(w.float).toBe(false); + expect(w.height).toEqual(0); + expect(w.nodes).toEqual([]); + expect(typeof w.onchange).toBe('function'); + expect(w._updateCounter).toEqual(0); + expect(w._float).toEqual(w.float); + }); + it('should set params correctly.', function() { + var fkt = function() { }; + var arr = [1,2,3]; + e.call(w, 1, fkt, true, 2, arr); + expect(w.width).toEqual(1); + expect(w.float).toBe(true); + expect(w.height).toEqual(2); + expect(w.nodes).toEqual(arr); + expect(w.onchange).toEqual(fkt); + expect(w._updateCounter).toEqual(0); + expect(w._float).toEqual(w.float); }); - describe('batch update', function() { - it('should set float and counter when calling batchUpdate.', function() { - e.prototype.batchUpdate.call(w); - expect(w.float).toBe(true); - expect(w._updateCounter).toEqual(1); - }); + }); - //test commit function + describe('batch update', function() { + it('should set float and counter when calling batchUpdate.', function() { + e.prototype.batchUpdate.call(w); + expect(w.float).toBe(true); + expect(w._updateCounter).toEqual(1); }); - describe('sorting of nodes', function() { + //test commit function - it('should sort ascending with width.', function() { - w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; - e.prototype._sortNodes.call(w, 1); - expect(w.nodes).toEqual([{x: 0, y: 1}, {x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}]); - }); + }); - it('should sort descending with width.', function() { - w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; - e.prototype._sortNodes.call(w, -1); - expect(w.nodes).toEqual([{x: 9, y: 0}, {x: 4, y: 4}, {x: 7, y: 0}, {x: 0, y: 1}]); - }); + describe('sorting of nodes', function() { - it('should sort ascending without width.', function() { - w.width = false; - w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; - e.prototype._sortNodes.call(w, 1); - expect(w.nodes).toEqual([{x: 7, y: 0, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}, {x: 4, y: 4, width: 1}]); - }); + it('should sort ascending with width.', function() { + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, 1); + expect(w.nodes).toEqual([{x: 0, y: 1}, {x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}]); + }); - it('should sort descending without width.', function() { - w.width = false; - w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; - e.prototype._sortNodes.call(w, -1); - expect(w.nodes).toEqual([{x: 4, y: 4, width: 1}, {x: 0, y: 1, width: 1}, {x: 9, y: 0, width: 1}, {x: 7, y: 0, width: 1}]); - }); + it('should sort descending with width.', function() { + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, -1); + expect(w.nodes).toEqual([{x: 9, y: 0}, {x: 4, y: 4}, {x: 7, y: 0}, {x: 0, y: 1}]); + }); + it('should sort ascending without width.', function() { + w.width = false; + w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; + e.prototype._sortNodes.call(w, 1); + expect(w.nodes).toEqual([{x: 7, y: 0, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}, {x: 4, y: 4, width: 1}]); }); - describe('grid.setAnimation', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should add class grid-stack-animate to the container.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - $('.grid-stack').removeClass('grid-stack-animate'); - var grid = $('.grid-stack').data('gridstack'); - grid.setAnimation(true); - expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(true); - }); - it('should remove class grid-stack-animate from the container.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - $('.grid-stack').addClass('grid-stack-animate'); - var grid = $('.grid-stack').data('gridstack'); - grid.setAnimation(false); - expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(false); - }); + it('should sort descending without width.', function() { + w.width = false; + w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; + e.prototype._sortNodes.call(w, -1); + expect(w.nodes).toEqual([{x: 4, y: 4, width: 1}, {x: 0, y: 1, width: 1}, {x: 9, y: 0, width: 1}, {x: 7, y: 0, width: 1}]); }); - describe('grid._setStaticClass', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should add class grid-stack-static to the container.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - staticGrid: true - }; - $('.grid-stack').gridstack(options); - $('.grid-stack').removeClass('grid-stack-static'); - var grid = $('.grid-stack').data('gridstack'); - grid._setStaticClass(); - expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); - }); - it('should remove class grid-stack-static from the container.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - staticGrid: false - }; - $('.grid-stack').gridstack(options); - $('.grid-stack').addClass('grid-stack-static'); - var grid = $('.grid-stack').data('gridstack'); - grid._setStaticClass(); - expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); - }); + }); + + describe('grid.setAnimation', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should add class grid-stack-animate to the container.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + $('.grid-stack').removeClass('grid-stack-animate'); + var grid = $('.grid-stack').data('gridstack'); + grid.setAnimation(true); + expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(true); }); + it('should remove class grid-stack-animate from the container.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + $('.grid-stack').addClass('grid-stack-animate'); + var grid = $('.grid-stack').data('gridstack'); + grid.setAnimation(false); + expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(false); + }); + }); - describe('grid.getCellFromPixel', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should return {x: 2, y: 5}.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var container = $('.grid-stack'); - var grid = $('.grid-stack').data('gridstack'); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel); - expect(cell.x).toBe(2); - expect(cell.y).toBe(5); - }); - it('should return {x: 2, y: 5}.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel, false); - expect(cell.x).toBe(2); - expect(cell.y).toBe(5); - }); - it('should return {x: 2, y: 5}.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel, true); - expect(cell.x).toBe(2); - expect(cell.y).toBe(5); - }); + describe('grid._setStaticClass', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should add class grid-stack-static to the container.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + staticGrid: true + }; + $('.grid-stack').gridstack(options); + $('.grid-stack').removeClass('grid-stack-static'); + var grid = $('.grid-stack').data('gridstack'); + grid._setStaticClass(); + expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); + }); + it('should remove class grid-stack-static from the container.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + staticGrid: false + }; + $('.grid-stack').gridstack(options); + $('.grid-stack').addClass('grid-stack-static'); + var grid = $('.grid-stack').data('gridstack'); + grid._setStaticClass(); + expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); + }); + }); - describe('grid.cellWidth', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should return 1/12th of container width.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - width: 12 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var res = Math.round($('.grid-stack').outerWidth() / 12); - expect(grid.cellWidth()).toBe(res); - }); - it('should return 1/10th of container width.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - width: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var res = Math.round($('.grid-stack').outerWidth() / 10); - expect(grid.cellWidth()).toBe(res); - }); + describe('grid.getCellFromPixel', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should return {x: 2, y: 5}.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var container = $('.grid-stack'); + var grid = $('.grid-stack').data('gridstack'); + var pixel = {top: 500, left: 200}; + var cell = grid.getCellFromPixel(pixel); + expect(cell.x).toBe(2); + expect(cell.y).toBe(5); + }); + it('should return {x: 2, y: 5}.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var pixel = {top: 500, left: 200}; + var cell = grid.getCellFromPixel(pixel, false); + expect(cell.x).toBe(2); + expect(cell.y).toBe(5); + }); + it('should return {x: 2, y: 5}.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var pixel = {top: 500, left: 200}; + var cell = grid.getCellFromPixel(pixel, true); + expect(cell.x).toBe(2); + expect(cell.y).toBe(5); + }); + }); - describe('grid.cellHeight', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should have no changes', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - width: 12 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.cellHeight( grid.cellHeight() ); - expect(grid.cellHeight()).toBe(80); - }); - it('should change cellHeight to 120', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - width: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.cellHeight( 120 ); - expect(grid.cellHeight()).toBe(120); - }); + describe('grid.cellWidth', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should return 1/12th of container width.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + width: 12 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var res = Math.round($('.grid-stack').outerWidth() / 12); + expect(grid.cellWidth()).toBe(res); + }); + it('should return 1/10th of container width.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + width: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var res = Math.round($('.grid-stack').outerWidth() / 10); + expect(grid.cellWidth()).toBe(res); + }); + }); - describe('grid.minWidth', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should set data-gs-min-width to 2.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.minWidth(items[i], 2); - } - for (var j = 0; j < items.length; j++) { - expect(parseInt($(items[j]).attr('data-gs-min-width'), 10)).toBe(2); - } - }); + describe('grid.cellHeight', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should have no changes', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + width: 12 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.cellHeight( grid.cellHeight() ); + expect(grid.cellHeight()).toBe(80); + }); + it('should change cellHeight to 120', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + width: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.cellHeight( 120 ); + expect(grid.cellHeight()).toBe(120); + }); + }); - describe('grid.maxWidth', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should set data-gs-min-width to 2.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.maxWidth(items[i], 2); - } - for (var j = 0; j < items.length; j++) { - expect(parseInt($(items[j]).attr('data-gs-max-width'), 10)).toBe(2); - } - }); + describe('grid.minWidth', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should set data-gs-min-width to 2.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.minWidth(items[i], 2); + } + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-min-width'), 10)).toBe(2); + } + }); + }); - describe('grid.minHeight', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should set data-gs-min-height to 2.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.minHeight(items[i], 2); - } - for (var j = 0; j < items.length; j++) { - expect(parseInt($(items[j]).attr('data-gs-min-height'), 10)).toBe(2); - } - }); + describe('grid.maxWidth', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should set data-gs-min-width to 2.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.maxWidth(items[i], 2); + } + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-max-width'), 10)).toBe(2); + } + }); + }); - describe('grid.maxHeight', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should set data-gs-min-height to 2.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.maxHeight(items[i], 2); - } - for (var j = 0; j < items.length; j++) { - expect(parseInt($(items[j]).attr('data-gs-max-height'), 10)).toBe(2); - } - }); + describe('grid.minHeight', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should set data-gs-min-height to 2.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.minHeight(items[i], 2); + } + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-min-height'), 10)).toBe(2); + } + }); + }); - describe('grid.isAreaEmpty', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should set return false.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); - expect(shouldBeFalse).toBe(false); - }); - it('should set return true.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); - expect(shouldBeTrue).toBe(true); - }); + describe('grid.maxHeight', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should set data-gs-min-height to 2.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.maxHeight(items[i], 2); + } + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-max-height'), 10)).toBe(2); + } + }); + }); - describe('grid method obsolete warnings', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should log a warning if set_static is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.set_static(true); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `set_static` is deprecated as of v0.2.5 and has been replaced with `setStatic`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _set_static_class is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._set_static_class(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_set_static_class` is deprecated as of v0.2.5 and has been replaced with `_setStaticClass`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if is_area_empty is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.is_area_empty(1, 1, 1, 1); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `is_area_empty` is deprecated as of v0.2.5 and has been replaced with `isAreaEmpty`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if batch_update is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.batch_update(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `batch_update` is deprecated as of v0.2.5 and has been replaced with `batchUpdate`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if get_cell_from_pixel is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var pixel = {top: 100, left: 72}; - grid.get_cell_from_pixel(pixel); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `get_cell_from_pixel` is deprecated as of v0.2.5 and has been replaced with `getCellFromPixel`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if cell_width is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.cell_width(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `cell_width` is deprecated as of v0.2.5 and has been replaced with `cellWidth`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if cell_height is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.cell_height(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `cell_height` is deprecated as of v0.2.5 and has been replaced with `cellHeight`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _update_element is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._update_element(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_element` is deprecated as of v0.2.5 and has been replaced with `_updateElement`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if min_width is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.min_width(items[i], 2); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `min_width` is deprecated as of v0.2.5 and has been replaced with `minWidth`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if min_height is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.min_height(items[i], 2); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `min_height` is deprecated as of v0.2.5 and has been replaced with `minHeight`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if remove_all is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.remove_all(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `remove_all` is deprecated as of v0.2.5 and has been replaced with `removeAll`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if remove_widget is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.remove_widget(items[i]); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `remove_widget` is deprecated as of v0.2.5 and has been replaced with `removeWidget`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if will_it_fit is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.will_it_fit(0, 0, 1, 1, false); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `will_it_fit` is deprecated as of v0.2.5 and has been replaced with `willItFit`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if make_widget is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.make_widget(items[i]); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `make_widget` is deprecated as of v0.2.5 and has been replaced with `makeWidget`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if add_widget is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.add_widget(items[i]); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `add_widget` is deprecated as of v0.2.5 and has been replaced with `addWidget`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if set_animation is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.set_animation(true); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `set_animation` is deprecated as of v0.2.5 and has been replaced with `setAnimation`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _prepare_element is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid._prepare_element(items[i]); - } - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_prepare_element` is deprecated as of v0.2.5 and has been replaced with `_prepareElement`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _is_one_column_mode is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._is_one_column_mode(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_is_one_column_mode` is deprecated as of v0.2.5 and has been replaced with `_isOneColumnMode`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _update_container_height is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._update_container_height(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_container_height` is deprecated as of v0.2.5 and has been replaced with `_updateContainerHeight`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _update_styles is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._update_styles(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_styles` is deprecated as of v0.2.5 and has been replaced with `_updateStyles`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _init_styles is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._init_styles(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_init_styles` is deprecated as of v0.2.5 and has been replaced with `_initStyles`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if _trigger_change_event is called.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid._trigger_change_event(); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_trigger_change_event` is deprecated as of v0.2.5 and has been replaced with `_triggerChangeEvent`. It will be **completely** removed in v1.0.'); - }); + describe('grid.isAreaEmpty', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should set return false.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); + expect(shouldBeFalse).toBe(false); + }); + it('should set return true.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); + expect(shouldBeTrue).toBe(true); + }); + }); - describe('grid opts obsolete warnings', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should log a warning if handle_class is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - handle_class: 'grid-stack-header' + describe('grid method obsolete warnings', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should log a warning if set_static is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.set_static(true); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `set_static` is deprecated as of v0.2.5 and has been replaced with `setStatic`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _set_static_class is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._set_static_class(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_set_static_class` is deprecated as of v0.2.5 and has been replaced with `_setStaticClass`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if is_area_empty is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.is_area_empty(1, 1, 1, 1); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `is_area_empty` is deprecated as of v0.2.5 and has been replaced with `isAreaEmpty`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if batch_update is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.batch_update(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `batch_update` is deprecated as of v0.2.5 and has been replaced with `batchUpdate`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if get_cell_from_pixel is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var pixel = {top: 100, left: 72}; + grid.get_cell_from_pixel(pixel); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `get_cell_from_pixel` is deprecated as of v0.2.5 and has been replaced with `getCellFromPixel`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if cell_width is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.cell_width(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `cell_width` is deprecated as of v0.2.5 and has been replaced with `cellWidth`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if cell_height is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.cell_height(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `cell_height` is deprecated as of v0.2.5 and has been replaced with `cellHeight`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _update_element is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._update_element(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_element` is deprecated as of v0.2.5 and has been replaced with `_updateElement`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if min_width is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.min_width(items[i], 2); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `min_width` is deprecated as of v0.2.5 and has been replaced with `minWidth`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if min_height is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.min_height(items[i], 2); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `min_height` is deprecated as of v0.2.5 and has been replaced with `minHeight`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if remove_all is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.remove_all(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `remove_all` is deprecated as of v0.2.5 and has been replaced with `removeAll`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if remove_widget is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.remove_widget(items[i]); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `remove_widget` is deprecated as of v0.2.5 and has been replaced with `removeWidget`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if will_it_fit is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.will_it_fit(0, 0, 1, 1, false); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `will_it_fit` is deprecated as of v0.2.5 and has been replaced with `willItFit`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if make_widget is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.make_widget(items[i]); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `make_widget` is deprecated as of v0.2.5 and has been replaced with `makeWidget`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if add_widget is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.add_widget(items[i]); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `add_widget` is deprecated as of v0.2.5 and has been replaced with `addWidget`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if set_animation is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.set_animation(true); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `set_animation` is deprecated as of v0.2.5 and has been replaced with `setAnimation`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _prepare_element is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid._prepare_element(items[i]); + } + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_prepare_element` is deprecated as of v0.2.5 and has been replaced with `_prepareElement`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _is_one_column_mode is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._is_one_column_mode(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_is_one_column_mode` is deprecated as of v0.2.5 and has been replaced with `_isOneColumnMode`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _update_container_height is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._update_container_height(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_container_height` is deprecated as of v0.2.5 and has been replaced with `_updateContainerHeight`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _update_styles is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._update_styles(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_update_styles` is deprecated as of v0.2.5 and has been replaced with `_updateStyles`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _init_styles is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._init_styles(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_init_styles` is deprecated as of v0.2.5 and has been replaced with `_initStyles`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if _trigger_change_event is called.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid._trigger_change_event(); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `_trigger_change_event` is deprecated as of v0.2.5 and has been replaced with `_triggerChangeEvent`. It will be **completely** removed in v1.0.'); + }); + }); - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `handle_class` is deprecated as of v0.2.5 and has been replaced with `handleClass`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if item_class is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - item_class: 'grid-stack-item' + describe('grid opts obsolete warnings', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should log a warning if handle_class is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + handle_class: 'grid-stack-header' - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `item_class` is deprecated as of v0.2.5 and has been replaced with `itemClass`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if placeholder_class is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - placeholder_class: 'grid-stack-placeholder' + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `handle_class` is deprecated as of v0.2.5 and has been replaced with `handleClass`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if item_class is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + item_class: 'grid-stack-item' - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `placeholder_class` is deprecated as of v0.2.5 and has been replaced with `placeholderClass`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if placeholder_text is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - placeholder_text: 'placeholder' + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `item_class` is deprecated as of v0.2.5 and has been replaced with `itemClass`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if placeholder_class is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + placeholder_class: 'grid-stack-placeholder' - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `placeholder_text` is deprecated as of v0.2.5 and has been replaced with `placeholderText`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if cell_height is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cell_height: 80, - verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `placeholder_class` is deprecated as of v0.2.5 and has been replaced with `placeholderClass`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if placeholder_text is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + placeholder_text: 'placeholder' - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `cell_height` is deprecated as of v0.2.5 and has been replaced with `cellHeight`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if vertical_margin is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - vertical_margin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `placeholder_text` is deprecated as of v0.2.5 and has been replaced with `placeholderText`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if cell_height is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cell_height: 80, + verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `vertical_margin` is deprecated as of v0.2.5 and has been replaced with `verticalMargin`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if min_width is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - min_width: 2 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `cell_height` is deprecated as of v0.2.5 and has been replaced with `cellHeight`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if vertical_margin is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + vertical_margin: 10 + + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `vertical_margin` is deprecated as of v0.2.5 and has been replaced with `verticalMargin`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if min_width is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + min_width: 2 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `min_width` is deprecated as of v0.2.5 and has been replaced with `minWidth`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if static_grid is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - static_grid: false + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `min_width` is deprecated as of v0.2.5 and has been replaced with `minWidth`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if static_grid is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + static_grid: false - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `static_grid` is deprecated as of v0.2.5 and has been replaced with `staticGrid`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if is_nested is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - is_nested: false + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `static_grid` is deprecated as of v0.2.5 and has been replaced with `staticGrid`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if is_nested is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + is_nested: false - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `is_nested` is deprecated as of v0.2.5 and has been replaced with `isNested`. It will be **completely** removed in v1.0.'); - }); - it('should log a warning if always_show_resize_handle is set.', function() { - console.warn = jasmine.createSpy('log'); - var options = { - cellHeight: 80, - verticalMargin: 10, - always_show_resize_handle: false + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `is_nested` is deprecated as of v0.2.5 and has been replaced with `isNested`. It will be **completely** removed in v1.0.'); + }); + it('should log a warning if always_show_resize_handle is set.', function() { + console.warn = jasmine.createSpy('log'); + var options = { + cellHeight: 80, + verticalMargin: 10, + always_show_resize_handle: false - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `always_show_resize_handle` is deprecated as of v0.2.5 and has been replaced with `alwaysShowResizeHandle`. It will be **completely** removed in v1.0.'); - }); + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `always_show_resize_handle` is deprecated as of v0.2.5 and has been replaced with `alwaysShowResizeHandle`. It will be **completely** removed in v1.0.'); }); + }); - describe('grid method _packNodes with float', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should allow same x, y coordinates for widgets.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - float: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - var $el; - var $oldEl; - for (var i = 0; i < items.length; i++) { - $el = $(grid.addWidget(items[i])); - $oldEl = $(items[i]); - expect(parseInt($oldEl.attr('data-gs-x'), 10)).toBe(parseInt($el.attr('data-gs-x'), 10)); - expect(parseInt($oldEl.attr('data-gs-y'), 10)).toBe(parseInt($el.attr('data-gs-y'), 10)); - } - }); - it('should not allow same x, y coordinates for widgets.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - var $el; - var $oldEl; - var newY; - var oldY; - for (var i = 0; i < items.length; i++) { - $oldEl = $.extend(true, {}, $(items[i])); - newY = parseInt($oldEl.attr('data-gs-y'), 10) + 5; - $oldEl.attr('data-gs-y', newY); - $el = $(grid.addWidget($oldEl)); - expect(parseInt($el.attr('data-gs-y'), 10)).not.toBe(newY); - } - }); + describe('grid method _packNodes with float', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should allow same x, y coordinates for widgets.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + float: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + var $el; + var $oldEl; + for (var i = 0; i < items.length; i++) { + $el = $(grid.addWidget(items[i])); + $oldEl = $(items[i]); + expect(parseInt($oldEl.attr('data-gs-x'), 10)).toBe(parseInt($el.attr('data-gs-x'), 10)); + expect(parseInt($oldEl.attr('data-gs-y'), 10)).toBe(parseInt($el.attr('data-gs-y'), 10)); + } + }); + it('should not allow same x, y coordinates for widgets.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + var $el; + var $oldEl; + var newY; + var oldY; + for (var i = 0; i < items.length; i++) { + $oldEl = $.extend(true, {}, $(items[i])); + newY = parseInt($oldEl.attr('data-gs-y'), 10) + 5; + $oldEl.attr('data-gs-y', newY); + $el = $(grid.addWidget($oldEl)); + expect(parseInt($el.attr('data-gs-y'), 10)).not.toBe(newY); + } + }); + }); - describe('grid method addWidget with all parameters', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should allow same x, y coordinates for widgets.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - float: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = - '
' + - '
' + - '
'; - var widget = grid.addWidget(widgetHTML, 6, 7, 2, 3, false, 1, 4, 2, 5, 'coolWidget'); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(7); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); - expect($widget.attr('data-gs-auto-position')).toBe(undefined); - expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); - expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); - expect($widget.attr('data-gs-id')).toBe('coolWidget'); - }); + describe('grid method addWidget with all parameters', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should allow same x, y coordinates for widgets.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + float: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var widgetHTML = + '
' + + '
' + + '
'; + var widget = grid.addWidget(widgetHTML, 6, 7, 2, 3, false, 1, 4, 2, 5, 'coolWidget'); + var $widget = $(widget); + expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); + expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(7); + expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); + expect($widget.attr('data-gs-auto-position')).toBe(undefined); + expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); + expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); + expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); + expect($widget.attr('data-gs-id')).toBe('coolWidget'); }); + }); - describe('grid method addWidget with autoPosition true', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should change x, y coordinates for widgets.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = - '
' + - '
' + - '
'; - var widget = grid.addWidget(widgetHTML, 9, 7, 2, 3, true); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(6); - expect(parseInt($widget.attr('data-gs-y'), 10)).not.toBe(7); - }); + describe('grid method addWidget with autoPosition true', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should change x, y coordinates for widgets.', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var widgetHTML = + '
' + + '
' + + '
'; + var widget = grid.addWidget(widgetHTML, 9, 7, 2, 3, true); + var $widget = $(widget); + expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(6); + expect(parseInt($widget.attr('data-gs-y'), 10)).not.toBe(7); + }); + }); - describe('grid.destroy', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - //document.body.removeChild(document.getElementsByClassName('grid-stack')[0]); - }); - it('should cleanup gridstack', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.destroy(); - expect($('.grid-stack').length).toBe(0); - expect(grid.grid).toBe(null); - }); - it('should cleanup gridstack but leave elements', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.destroy(false); - expect($('.grid-stack').length).toBe(1); - expect($('.grid-stack-item').length).toBe(2); - expect(grid.grid).toBe(null); - grid.destroy(); - }); + describe('grid.destroy', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + //document.body.removeChild(document.getElementsByClassName('grid-stack')[0]); + }); + it('should cleanup gridstack', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.destroy(); + expect($('.grid-stack').length).toBe(0); + expect(grid.grid).toBe(null); + }); + it('should cleanup gridstack but leave elements', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.destroy(false); + expect($('.grid-stack').length).toBe(1); + expect($('.grid-stack-item').length).toBe(2); + expect(grid.grid).toBe(null); + grid.destroy(); + }); + }); - describe('grid.resize', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should resize widget', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.resize(items[0], 5, 5); - expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); - expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); - }); + describe('grid.resize', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should resize widget', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.resize(items[0], 5, 5); + expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); + expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); + }); + }); - describe('grid.move', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should move widget', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - float: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.move(items[0], 5, 5); - expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); - expect(parseInt($(items[0]).attr('data-gs-y'), 10)).toBe(5); - }); + describe('grid.move', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should move widget', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + float: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.move(items[0], 5, 5); + expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); + expect(parseInt($(items[0]).attr('data-gs-y'), 10)).toBe(5); + }); + }); - describe('grid.moveNode', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should do nothing and return node', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid._updateElement(items[0], function(el, node) { - var newNode = grid.grid.moveNode(node); - expect(newNode).toBe(node); - }); - }); - it('should do nothing and return node', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.minWidth(items[0], 1); - grid.maxWidth(items[0], 2); - grid.minHeight(items[0], 1); - grid.maxHeight(items[0], 2); - grid._updateElement(items[0], function(el, node) { - var newNode = grid.grid.moveNode(node); - expect(newNode).toBe(node); - }); - }); + describe('grid.moveNode', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should do nothing and return node', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid._updateElement(items[0], function(el, node) { + var newNode = grid.grid.moveNode(node); + expect(newNode).toBe(node); + }); + }); + it('should do nothing and return node', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.minWidth(items[0], 1); + grid.maxWidth(items[0], 2); + grid.minHeight(items[0], 1); + grid.maxHeight(items[0], 2); + grid._updateElement(items[0], function(el, node) { + var newNode = grid.grid.moveNode(node); + expect(newNode).toBe(node); + }); }); + }); - describe('grid.update', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should move and resize widget', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - float: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.update(items[0], 5, 5, 5 ,5); - expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); - expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); - expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); - expect(parseInt($(items[0]).attr('data-gs-y'), 10)).toBe(5); - }); + describe('grid.update', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should move and resize widget', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + float: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.update(items[0], 5, 5, 5 ,5); + expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); + expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); + expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); + expect(parseInt($(items[0]).attr('data-gs-y'), 10)).toBe(5); + }); + }); - describe('grid.verticalMargin', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should return verticalMargin', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var vm = grid.verticalMargin(); - expect(vm).toBe(10); - }); - it('should return update verticalMargin', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - grid.verticalMargin(11); - expect(grid.verticalMargin()).toBe(11); - }); - it('should do nothing', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var vm = grid.verticalMargin(10); - expect(grid.verticalMargin()).toBe(10); - }); - it('should do nothing', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - height: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var vm = grid.verticalMargin(10); - expect(grid.verticalMargin()).toBe(10); - }); - it('should not update styles', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); + describe('grid.verticalMargin', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should return verticalMargin', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var vm = grid.verticalMargin(); + expect(vm).toBe(10); + }); + it('should return update verticalMargin', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + grid.verticalMargin(11); + expect(grid.verticalMargin()).toBe(11); + }); + it('should do nothing', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var vm = grid.verticalMargin(10); + expect(grid.verticalMargin()).toBe(10); + }); + it('should do nothing', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + height: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var vm = grid.verticalMargin(10); + expect(grid.verticalMargin()).toBe(10); + }); + it('should not update styles', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); - spyOn(grid, '_updateStyles'); - grid.verticalMargin(11, true); - expect(grid._updateStyles).not.toHaveBeenCalled(); - }); + spyOn(grid, '_updateStyles'); + grid.verticalMargin(11, true); + expect(grid._updateStyles).not.toHaveBeenCalled(); }); + }); - describe('grid.opts.rtl', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should add grid-stack-rtl class', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - rtl: true - }; - $('.grid-stack').gridstack(options); - expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(true); - }); - it('should not add grid-stack-rtl class', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(false); - }); + describe('grid.opts.rtl', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); }); + it('should add grid-stack-rtl class', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + rtl: true + }; + $('.grid-stack').gridstack(options); + expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(true); + }); + it('should not add grid-stack-rtl class', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(false); + }); + }); - describe('grid.enableMove', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should enable move', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - minWidth: 1, - disableDrag: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - expect(grid.opts.disableDrag).toBe(true); - grid.enableMove(true, true); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(true); - } - expect(grid.opts.disableDrag).toBe(false); - }); - it('should disable move', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - minWidth: 1 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.enableMove(false); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); - } - expect(grid.opts.disableDrag).toBe(false); - }); + describe('grid.enableMove', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should enable move', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + minWidth: 1, + disableDrag: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + expect(grid.opts.disableDrag).toBe(true); + grid.enableMove(true, true); + for (var i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-handle')).toBe(true); + } + expect(grid.opts.disableDrag).toBe(false); }); + it('should disable move', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + minWidth: 1 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.enableMove(false); + for (var i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); + } + expect(grid.opts.disableDrag).toBe(false); + }); + }); - describe('grid.enableResize', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should enable resize', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - minWidth: 1, - disableResize: true - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - expect(grid.opts.disableResize).toBe(true); - grid.enableResize(true, true); - for (var i = 0; i < items.length; i++) { - expect(($(items[i]).resizable('option','disabled'))).toBe(false); - } - expect(grid.opts.disableResize).toBe(false); - }); - it('should disable resize', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - minWidth: 1 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.enableResize(false); - for (var i = 0; i < items.length; i++) { - expect(($(items[i]).resizable('option','disabled'))).toBe(true); - } - expect(grid.opts.disableResize).toBe(false); - }); + describe('grid.enableResize', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should enable resize', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + minWidth: 1, + disableResize: true + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + expect(grid.opts.disableResize).toBe(true); + grid.enableResize(true, true); + for (var i = 0; i < items.length; i++) { + expect(($(items[i]).resizable('option','disabled'))).toBe(false); + } + expect(grid.opts.disableResize).toBe(false); }); + it('should disable resize', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + minWidth: 1 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.enableResize(false); + for (var i = 0; i < items.length; i++) { + expect(($(items[i]).resizable('option','disabled'))).toBe(true); + } + expect(grid.opts.disableResize).toBe(false); + }); + }); - describe('grid.enable', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should enable movable and resizable', function() { - var options = { - cellHeight: 80, - verticalMargin: 10, - minWidth: 1 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - grid.enableResize(false); - grid.enableMove(false); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); - expect(($(items[i]).resizable('option','disabled'))).toBe(true); - } - grid.enable(); - for (var j = 0; j < items.length; j++) { - expect($(items[j]).hasClass('ui-draggable-handle')).toBe(true); - expect(($(items[j]).resizable('option','disabled'))).toBe(false); - } - }); + describe('grid.enable', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should enable movable and resizable', function() { + var options = { + cellHeight: 80, + verticalMargin: 10, + minWidth: 1 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + grid.enableResize(false); + grid.enableMove(false); + for (var i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); + expect(($(items[i]).resizable('option','disabled'))).toBe(true); + } + grid.enable(); + for (var j = 0; j < items.length; j++) { + expect($(items[j]).hasClass('ui-draggable-handle')).toBe(true); + expect(($(items[j]).resizable('option','disabled'))).toBe(false); + } }); + }); - describe('grid.enable', function() { - beforeEach(function() { - document.body.insertAdjacentHTML( - 'afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should lock widgets', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.locked(items[i], true); - expect($(items[i]).attr('data-gs-locked')).toBe('yes'); - } - }); - it('should unlock widgets', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - $('.grid-stack').gridstack(options); - var grid = $('.grid-stack').data('gridstack'); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.locked(items[i], false); - expect($(items[i]).attr('data-gs-locked')).toBe(undefined); - } - }); + describe('grid.enable', function() { + beforeEach(function() { + document.body.insertAdjacentHTML( + 'afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should lock widgets', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.locked(items[i], true); + expect($(items[i]).attr('data-gs-locked')).toBe('yes'); + } + }); + it('should unlock widgets', function() { + var options = { + cellHeight: 80, + verticalMargin: 10 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + for (var i = 0; i < items.length; i++) { + grid.locked(items[i], false); + expect($(items[i]).attr('data-gs-locked')).toBe(undefined); + } }); + }); }); diff --git a/spec/utils-spec.js b/spec/utils-spec.js index 5087662bb..6a69da9ab 100644 --- a/spec/utils-spec.js +++ b/spec/utils-spec.js @@ -1,122 +1,122 @@ describe('gridstack utils', function() { - 'use strict'; + 'use strict'; - var utils; + var utils; - beforeEach(function() { - utils = window.GridStackUI.Utils; + beforeEach(function() { + utils = window.GridStackUI.Utils; + }); + + describe('setup of utils', function() { + + it('should set gridstack utils.', function() { + expect(utils).not.toBeNull(); + expect(typeof utils).toBe('object'); }); - describe('setup of utils', function() { + }); - it('should set gridstack utils.', function() { - expect(utils).not.toBeNull(); - expect(typeof utils).toBe('object'); - }); + describe('test toBool', function() { + it('should return booleans.', function() { + expect(utils.toBool(true)).toEqual(true); + expect(utils.toBool(false)).toEqual(false); }); - describe('test toBool', function() { + it('should work with integer.', function() { + expect(utils.toBool(1)).toEqual(true); + expect(utils.toBool(0)).toEqual(false); + }); - it('should return booleans.', function() { - expect(utils.toBool(true)).toEqual(true); - expect(utils.toBool(false)).toEqual(false); - }); + it('should work with Strings.', function() { + expect(utils.toBool('')).toEqual(false); + expect(utils.toBool('0')).toEqual(false); + expect(utils.toBool('no')).toEqual(false); + expect(utils.toBool('false')).toEqual(false); + expect(utils.toBool('yes')).toEqual(true); + expect(utils.toBool('yadda')).toEqual(true); + }); - it('should work with integer.', function() { - expect(utils.toBool(1)).toEqual(true); - expect(utils.toBool(0)).toEqual(false); - }); + }); - it('should work with Strings.', function() { - expect(utils.toBool('')).toEqual(false); - expect(utils.toBool('0')).toEqual(false); - expect(utils.toBool('no')).toEqual(false); - expect(utils.toBool('false')).toEqual(false); - expect(utils.toBool('yes')).toEqual(true); - expect(utils.toBool('yadda')).toEqual(true); - }); + describe('test isIntercepted', function() { + var src = {x: 3, y: 2, width: 3, height: 2}; + it('should intercept.', function() { + expect(utils.isIntercepted(src, {x: 0, y: 0, width: 4, height: 3})).toEqual(true); + expect(utils.isIntercepted(src, {x: 0, y: 0, width: 40, height: 30})).toEqual(true); + expect(utils.isIntercepted(src, {x: 3, y: 2, width: 3, height: 2})).toEqual(true); + expect(utils.isIntercepted(src, {x: 5, y: 3, width: 3, height: 2})).toEqual(true); }); - describe('test isIntercepted', function() { - var src = {x: 3, y: 2, width: 3, height: 2}; - - it('should intercept.', function() { - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 4, height: 3})).toEqual(true); - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 40, height: 30})).toEqual(true); - expect(utils.isIntercepted(src, {x: 3, y: 2, width: 3, height: 2})).toEqual(true); - expect(utils.isIntercepted(src, {x: 5, y: 3, width: 3, height: 2})).toEqual(true); - }); - - it('shouldn\'t intercept.', function() { - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 3, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 13, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 1, y: 4, width: 13, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 0, y: 3, width: 3, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 6, y: 3, width: 3, height: 2})).toEqual(false); - }); + it('shouldn\'t intercept.', function() { + expect(utils.isIntercepted(src, {x: 0, y: 0, width: 3, height: 2})).toEqual(false); + expect(utils.isIntercepted(src, {x: 0, y: 0, width: 13, height: 2})).toEqual(false); + expect(utils.isIntercepted(src, {x: 1, y: 4, width: 13, height: 2})).toEqual(false); + expect(utils.isIntercepted(src, {x: 0, y: 3, width: 3, height: 2})).toEqual(false); + expect(utils.isIntercepted(src, {x: 6, y: 3, width: 3, height: 2})).toEqual(false); }); + }); - describe('test createStylesheet/removeStylesheet', function() { - - it('should create/remove style DOM', function() { - var _id = 'test-123'; + describe('test createStylesheet/removeStylesheet', function() { - utils.createStylesheet(_id); + it('should create/remove style DOM', function() { + var _id = 'test-123'; - var style = $('STYLE[data-gs-style-id=' + _id + ']'); + utils.createStylesheet(_id); - expect(style.length).toEqual(1); - expect(style.prop('tagName')).toEqual('STYLE'); + var style = $('STYLE[data-gs-style-id=' + _id + ']'); - utils.removeStylesheet(_id) + expect(style.length).toEqual(1); + expect(style.prop('tagName')).toEqual('STYLE'); - style = $('STYLE[data-gs-style-id=' + _id + ']'); + utils.removeStylesheet(_id) - expect(style.length).toEqual(0); - }); + style = $('STYLE[data-gs-style-id=' + _id + ']'); + expect(style.length).toEqual(0); }); - describe('test parseHeight', function() { - - it('should parse height value', function() { - expect(utils.parseHeight(12)).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); - expect(utils.parseHeight('12px')).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); - expect(utils.parseHeight('12.3px')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'px'})); - expect(utils.parseHeight('12.3em')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'em'})); - expect(utils.parseHeight('12.3rem')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'rem'})); - expect(utils.parseHeight('12.3vh')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vh'})); - expect(utils.parseHeight('12.3vw')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vw'})); - expect(utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({height: 12.5, unit: 'px'})); - expect(function() { utils.parseHeight('12.5 df'); }).toThrowError('Invalid height'); - - }); - - it('should parse negative height value', function() { - expect(utils.parseHeight(-12)).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); - expect(utils.parseHeight('-12px')).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); - expect(utils.parseHeight('-12.3px')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'px'})); - expect(utils.parseHeight('-12.3em')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'em'})); - expect(utils.parseHeight('-12.3rem')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'rem'})); - expect(utils.parseHeight('-12.3vh')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vh'})); - expect(utils.parseHeight('-12.3vw')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vw'})); - expect(utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({height: -12.5, unit: 'px'})); - expect(function() { utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); - }); + }); + + describe('test parseHeight', function() { + + it('should parse height value', function() { + expect(utils.parseHeight(12)).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); + expect(utils.parseHeight('12px')).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); + expect(utils.parseHeight('12.3px')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'px'})); + expect(utils.parseHeight('12.3em')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'em'})); + expect(utils.parseHeight('12.3rem')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'rem'})); + expect(utils.parseHeight('12.3vh')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vh'})); + expect(utils.parseHeight('12.3vw')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vw'})); + expect(utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({height: 12.5, unit: 'px'})); + expect(function() { utils.parseHeight('12.5 df'); }).toThrowError('Invalid height'); + }); - describe('test defaults', function() { - it('should assign missing field or undefined', function() { - var src = {}; - expect(src).toEqual({}); - expect(utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); - expect(utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); - src.width = undefined; - expect(src).toEqual({x: 1, y: 2, width: undefined}); - expect(utils.defaults(src, {x: 10, width: 3})).toEqual({x: 1, y: 2, width: 3}); - expect(utils.defaults(src, {height: undefined})).toEqual({x: 1, y: 2, width: 3, height: undefined}); - }); + it('should parse negative height value', function() { + expect(utils.parseHeight(-12)).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); + expect(utils.parseHeight('-12px')).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); + expect(utils.parseHeight('-12.3px')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'px'})); + expect(utils.parseHeight('-12.3em')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'em'})); + expect(utils.parseHeight('-12.3rem')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'rem'})); + expect(utils.parseHeight('-12.3vh')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vh'})); + expect(utils.parseHeight('-12.3vw')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vw'})); + expect(utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({height: -12.5, unit: 'px'})); + expect(function() { utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); + }); + }); + + describe('test defaults', function() { + it('should assign missing field or undefined', function() { + var src = {}; + expect(src).toEqual({}); + expect(utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); + expect(utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); + src.width = undefined; + expect(src).toEqual({x: 1, y: 2, width: undefined}); + expect(utils.defaults(src, {x: 10, width: 3})).toEqual({x: 1, y: 2, width: 3}); + expect(utils.defaults(src, {height: undefined})).toEqual({x: 1, y: 2, width: 3, height: undefined}); }); + }); }); diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 66df7d5bd..40e6503d9 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,21 +1,21 @@ $gridstack-columns: 12 !default; @mixin grid-stack-items($gridstack-columns) { - .grid-stack.grid-stack-#{$gridstack-columns} { + .grid-stack.grid-stack-#{$gridstack-columns} { - > .grid-stack-item { - min-width: 100% / $gridstack-columns; + > .grid-stack-item { + min-width: 100% / $gridstack-columns; - @for $i from 1 through $gridstack-columns { - &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } - &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } - &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } - &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } - } - } + @for $i from 1 through $gridstack-columns { + &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } + &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } + &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } + &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } + } } + } } @for $j from 1 through $gridstack-columns { - @include grid-stack-items($j) + @include grid-stack-items($j) } diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 23598da16..63cc5964f 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,93 +1,93 @@ /** * gridstack.js 0.5.1-dev - * http://troolee.github.io/gridstack.js/ - * (c) 2014-2017 Pavel Reznikov, Dylan Weiss + * https://gridstackjs.com/ + * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. * @preserve */ (function(factory) { - if (typeof define === 'function' && define.amd) { - define(['jquery', 'gridstack', 'exports', 'jquery-ui/data', 'jquery-ui/disable-selection', - 'jquery-ui/focusable', 'jquery-ui/form', 'jquery-ui/ie', 'jquery-ui/keycode', 'jquery-ui/labels', - 'jquery-ui/jquery-1-7', 'jquery-ui/plugin', 'jquery-ui/safe-active-element', 'jquery-ui/safe-blur', - 'jquery-ui/scroll-parent', 'jquery-ui/tabbable', 'jquery-ui/unique-id', 'jquery-ui/version', - 'jquery-ui/widget', 'jquery-ui/widgets/mouse', 'jquery-ui/widgets/draggable', - 'jquery-ui/widgets/droppable', 'jquery-ui/widgets/resizable'], factory); - } else if (typeof exports !== 'undefined') { - try { jQuery = require('jquery'); } catch (e) {} - try { gridstack = require('gridstack'); } catch (e) {} - factory(jQuery, gridstack.GridStackUI, exports); - } else { - factory(jQuery, GridStackUI, window); - } + if (typeof define === 'function' && define.amd) { + define(['jquery', 'gridstack', 'exports', 'jquery-ui/data', 'jquery-ui/disable-selection', + 'jquery-ui/focusable', 'jquery-ui/form', 'jquery-ui/ie', 'jquery-ui/keycode', 'jquery-ui/labels', + 'jquery-ui/jquery-1-7', 'jquery-ui/plugin', 'jquery-ui/safe-active-element', 'jquery-ui/safe-blur', + 'jquery-ui/scroll-parent', 'jquery-ui/tabbable', 'jquery-ui/unique-id', 'jquery-ui/version', + 'jquery-ui/widget', 'jquery-ui/widgets/mouse', 'jquery-ui/widgets/draggable', + 'jquery-ui/widgets/droppable', 'jquery-ui/widgets/resizable'], factory); + } else if (typeof exports !== 'undefined') { + try { jQuery = require('jquery'); } catch (e) {} + try { gridstack = require('gridstack'); } catch (e) {} + factory(jQuery, gridstack.GridStackUI, exports); + } else { + factory(jQuery, GridStackUI, window); + } })(function($, GridStackUI, scope) { - /** - * @class JQueryUIGridStackDragDropPlugin - * jQuery UI implementation of drag'n'drop gridstack plugin. - */ - function JQueryUIGridStackDragDropPlugin(grid) { - GridStackUI.GridStackDragDropPlugin.call(this, grid); - } + /** + * @class JQueryUIGridStackDragDropPlugin + * jQuery UI implementation of drag'n'drop gridstack plugin. + */ + function JQueryUIGridStackDragDropPlugin(grid) { + GridStackUI.GridStackDragDropPlugin.call(this, grid); + } - GridStackUI.GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); + GridStackUI.GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStackUI.GridStackDragDropPlugin.prototype); - JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; + JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStackUI.GridStackDragDropPlugin.prototype); + JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; - JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.resizable(opts); - } else if (opts === 'option') { - var key = arguments[2]; - var value = arguments[3]; - el.resizable(opts, key, value); - } else { - var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') : - this.grid.opts.resizable.handles; - el.resizable($.extend({}, this.grid.opts.resizable, { - handles: handles - }, { - start: opts.start || function() {}, - stop: opts.stop || function() {}, - resize: opts.resize || function() {} - })); - } - return this; - }; + JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) { + el = $(el); + if (opts === 'disable' || opts === 'enable') { + el.resizable(opts); + } else if (opts === 'option') { + var key = arguments[2]; + var value = arguments[3]; + el.resizable(opts, key, value); + } else { + var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') : + this.grid.opts.resizable.handles; + el.resizable($.extend({}, this.grid.opts.resizable, { + handles: handles + }, { + start: opts.start || function() {}, + stop: opts.stop || function() {}, + resize: opts.resize || function() {} + })); + } + return this; + }; - JQueryUIGridStackDragDropPlugin.prototype.draggable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.draggable(opts); - } else { - el.draggable($.extend({}, this.grid.opts.draggable, { - containment: this.grid.opts.isNested ? this.grid.container.parent() : null, - start: opts.start || function() {}, - stop: opts.stop || function() {}, - drag: opts.drag || function() {} - })); - } - return this; - }; + JQueryUIGridStackDragDropPlugin.prototype.draggable = function(el, opts) { + el = $(el); + if (opts === 'disable' || opts === 'enable') { + el.draggable(opts); + } else { + el.draggable($.extend({}, this.grid.opts.draggable, { + containment: this.grid.opts.isNested ? this.grid.container.parent() : null, + start: opts.start || function() {}, + stop: opts.stop || function() {}, + drag: opts.drag || function() {} + })); + } + return this; + }; - JQueryUIGridStackDragDropPlugin.prototype.droppable = function(el, opts) { - el = $(el); - el.droppable(opts); - return this; - }; + JQueryUIGridStackDragDropPlugin.prototype.droppable = function(el, opts) { + el = $(el); + el.droppable(opts); + return this; + }; - JQueryUIGridStackDragDropPlugin.prototype.isDroppable = function(el, opts) { - el = $(el); - return Boolean(el.data('droppable')); - }; + JQueryUIGridStackDragDropPlugin.prototype.isDroppable = function(el, opts) { + el = $(el); + return Boolean(el.data('droppable')); + }; - JQueryUIGridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - $(el).on(eventName, callback); - return this; - }; + JQueryUIGridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { + $(el).on(eventName, callback); + return this; + }; - scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; + scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; - return JQueryUIGridStackDragDropPlugin; + return JQueryUIGridStackDragDropPlugin; }); diff --git a/src/gridstack.js b/src/gridstack.js index dd9ed2d25..d673d9849 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,1912 +1,1912 @@ /** * gridstack.js 0.5.1-dev - * http://troolee.github.io/gridstack.js/ - * (c) 2014-2018 Pavel Reznikov, Dylan Weiss + * https://gridstackjs.com/ + * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. * @preserve */ (function(factory) { - if (typeof define === 'function' && define.amd) { - define(['jquery', 'exports'], factory); - } else if (typeof exports !== 'undefined') { - var jQueryModule; + if (typeof define === 'function' && define.amd) { + define(['jquery', 'exports'], factory); + } else if (typeof exports !== 'undefined') { + var jQueryModule; - try { jQueryModule = require('jquery'); } catch (e) {} + try { jQueryModule = require('jquery'); } catch (e) {} - factory(jQueryModule || window.jQuery, exports); - } else { - factory(window.jQuery, window); - } + factory(jQueryModule || window.jQuery, exports); + } else { + factory(window.jQuery, window); + } })(function($, scope) { - var obsolete = function(f, oldName, newName) { - var wrapper = function() { - console.warn('gridstack.js: Function `' + oldName + '` is deprecated as of v0.2.5 and has been replaced ' + - 'with `' + newName + '`. It will be **completely** removed in v1.0.'); - return f.apply(this, arguments); - }; - wrapper.prototype = f.prototype; - - return wrapper; - }; - - var obsoleteOpts = function(oldName, newName) { - console.warn('gridstack.js: Option `' + oldName + '` is deprecated as of v0.2.5 and has been replaced with `' + - newName + '`. It will be **completely** removed in v1.0.'); - }; - - var Utils = { - - isIntercepted: function(a, b) { - return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); - }, - - sort: function(nodes, dir, width) { - if (!width) { - var widths = nodes.map(function(node) { return node.x + node.width; }); - width = Math.max.apply(Math, widths); - } - - dir = dir != -1 ? 1 : -1; - return Utils.sortBy(nodes, function(n) { return dir * (n.x + n.y * width); }); - }, - - createStylesheet: function(id) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.setAttribute('data-gs-style-id', id); - if (style.styleSheet) { - style.styleSheet.cssText = ''; + var obsolete = function(f, oldName, newName) { + var wrapper = function() { + console.warn('gridstack.js: Function `' + oldName + '` is deprecated as of v0.2.5 and has been replaced ' + + 'with `' + newName + '`. It will be **completely** removed in v1.0.'); + return f.apply(this, arguments); + }; + wrapper.prototype = f.prototype; + + return wrapper; + }; + + var obsoleteOpts = function(oldName, newName) { + console.warn('gridstack.js: Option `' + oldName + '` is deprecated as of v0.2.5 and has been replaced with `' + + newName + '`. It will be **completely** removed in v1.0.'); + }; + + var Utils = { + + isIntercepted: function(a, b) { + return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); + }, + + sort: function(nodes, dir, width) { + if (!width) { + var widths = nodes.map(function(node) { return node.x + node.width; }); + width = Math.max.apply(Math, widths); + } + + dir = dir != -1 ? 1 : -1; + return Utils.sortBy(nodes, function(n) { return dir * (n.x + n.y * width); }); + }, + + createStylesheet: function(id) { + var style = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.setAttribute('data-gs-style-id', id); + if (style.styleSheet) { + style.styleSheet.cssText = ''; + } else { + style.appendChild(document.createTextNode('')); + } + document.getElementsByTagName('head')[0].appendChild(style); + return style.sheet; + }, + + removeStylesheet: function(id) { + $('STYLE[data-gs-style-id=' + id + ']').remove(); + }, + + insertCSSRule: function(sheet, selector, rules, index) { + if (typeof sheet.insertRule === 'function') { + sheet.insertRule(selector + '{' + rules + '}', index); + } else if (typeof sheet.addRule === 'function') { + sheet.addRule(selector, rules, index); + } + }, + + toBool: function(v) { + if (typeof v == 'boolean') { + return v; + } + if (typeof v == 'string') { + v = v.toLowerCase(); + return !(v === '' || v == 'no' || v == 'false' || v == '0'); + } + return Boolean(v); + }, + + _collisionNodeCheck: function(n) { + return n != this.node && Utils.isIntercepted(n, this.nn); + }, + + _didCollide: function(bn) { + return Utils.isIntercepted({x: this.n.x, y: this.newY, width: this.n.width, height: this.n.height}, bn); + }, + + _isAddNodeIntercepted: function(n) { + return Utils.isIntercepted({x: this.x, y: this.y, width: this.node.width, height: this.node.height}, n); + }, + + parseHeight: function(val) { + var height = val; + var heightUnit = 'px'; + if (height && typeof height === 'string') { + var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/); + if (!match) { + throw new Error('Invalid height'); + } + heightUnit = match[2] || 'px'; + height = parseFloat(match[1]); + } + return {height: height, unit: heightUnit}; + }, + + without: function(array, item) { + var index = array.indexOf(item); + + if (index !== -1) { + array = array.slice(0); + array.splice(index, 1); + } + + return array; + }, + + sortBy: function(array, getter) { + return array.slice(0).sort(function(left, right) { + var valueLeft = getter(left); + var valueRight = getter(right); + + if (valueRight === valueLeft) { + return 0; + } + + return valueLeft > valueRight ? 1 : -1; + }); + }, + + defaults: function(target) { + var sources = Array.prototype.slice.call(arguments, 1); + + sources.forEach(function(source) { + for (var prop in source) { + if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { + target[prop] = source[prop]; + } + } + }); + + return target; + }, + + clone: function(target) { + return $.extend({}, target); + }, + + throttle: function(callback, delay) { + var isWaiting = false; + + return function() { + if (!isWaiting) { + callback.apply(this, arguments); + isWaiting = true; + setTimeout(function() { isWaiting = false; }, delay); + } + }; + }, + + removePositioningStyles: function(el) { + var style = el[0].style; + if (style.position) { + style.removeProperty('position'); + } + if (style.left) { + style.removeProperty('left'); + } + if (style.top) { + style.removeProperty('top'); + } + if (style.width) { + style.removeProperty('width'); + } + if (style.height) { + style.removeProperty('height'); + } + }, + getScrollParent: function(el) { + var returnEl; + if (el == null) { + returnEl = null; + } else if (el.scrollHeight > el.clientHeight) { + returnEl = el; + } else { + returnEl = Utils.getScrollParent(el.parentNode); + } + return returnEl; + }, + updateScrollPosition: function(el, ui, distance) { + // is widget in view? + var rect = el.getBoundingClientRect(); + var innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); + if (rect.top < 0 || + rect.bottom > innerHeightOrClientHeight + ) { + // set scrollTop of first parent that scrolls + // if parent is larger than el, set as low as possible + // to get entire widget on screen + var offsetDiffDown = rect.bottom - innerHeightOrClientHeight; + var offsetDiffUp = rect.top; + var scrollEl = Utils.getScrollParent(el); + if (scrollEl != null) { + var prevScroll = scrollEl.scrollTop; + if (rect.top < 0 && distance < 0) { + // moving up + if (el.offsetHeight > innerHeightOrClientHeight) { + scrollEl.scrollTop += distance; } else { - style.appendChild(document.createTextNode('')); - } - document.getElementsByTagName('head')[0].appendChild(style); - return style.sheet; - }, - - removeStylesheet: function(id) { - $('STYLE[data-gs-style-id=' + id + ']').remove(); - }, - - insertCSSRule: function(sheet, selector, rules, index) { - if (typeof sheet.insertRule === 'function') { - sheet.insertRule(selector + '{' + rules + '}', index); - } else if (typeof sheet.addRule === 'function') { - sheet.addRule(selector, rules, index); - } - }, - - toBool: function(v) { - if (typeof v == 'boolean') { - return v; + scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp; } - if (typeof v == 'string') { - v = v.toLowerCase(); - return !(v === '' || v == 'no' || v == 'false' || v == '0'); - } - return Boolean(v); - }, - - _collisionNodeCheck: function(n) { - return n != this.node && Utils.isIntercepted(n, this.nn); - }, - - _didCollide: function(bn) { - return Utils.isIntercepted({x: this.n.x, y: this.newY, width: this.n.width, height: this.n.height}, bn); - }, - - _isAddNodeIntercepted: function(n) { - return Utils.isIntercepted({x: this.x, y: this.y, width: this.node.width, height: this.node.height}, n); - }, - - parseHeight: function(val) { - var height = val; - var heightUnit = 'px'; - if (height && typeof height === 'string') { - var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw)?$/); - if (!match) { - throw new Error('Invalid height'); - } - heightUnit = match[2] || 'px'; - height = parseFloat(match[1]); - } - return {height: height, unit: heightUnit}; - }, - - without: function(array, item) { - var index = array.indexOf(item); - - if (index !== -1) { - array = array.slice(0); - array.splice(index, 1); - } - - return array; - }, - - sortBy: function(array, getter) { - return array.slice(0).sort(function(left, right) { - var valueLeft = getter(left); - var valueRight = getter(right); - - if (valueRight === valueLeft) { - return 0; - } - - return valueLeft > valueRight ? 1 : -1; - }); - }, - - defaults: function(target) { - var sources = Array.prototype.slice.call(arguments, 1); - - sources.forEach(function(source) { - for (var prop in source) { - if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { - target[prop] = source[prop]; - } - } - }); - - return target; - }, - - clone: function(target) { - return $.extend({}, target); - }, - - throttle: function(callback, delay) { - var isWaiting = false; - - return function() { - if (!isWaiting) { - callback.apply(this, arguments); - isWaiting = true; - setTimeout(function() { isWaiting = false; }, delay); - } - }; - }, - - removePositioningStyles: function(el) { - var style = el[0].style; - if (style.position) { - style.removeProperty('position'); - } - if (style.left) { - style.removeProperty('left'); - } - if (style.top) { - style.removeProperty('top'); - } - if (style.width) { - style.removeProperty('width'); - } - if (style.height) { - style.removeProperty('height'); - } - }, - getScrollParent: function(el) { - var returnEl; - if (el == null) { - returnEl = null; - } else if (el.scrollHeight > el.clientHeight) { - returnEl = el; + } else if (distance > 0) { + // moving down + if (el.offsetHeight > innerHeightOrClientHeight) { + scrollEl.scrollTop += distance; } else { - returnEl = Utils.getScrollParent(el.parentNode); - } - return returnEl; - }, - updateScrollPosition: function(el, ui, distance) { - // is widget in view? - var rect = el.getBoundingClientRect(); - var innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); - if (rect.top < 0 || - rect.bottom > innerHeightOrClientHeight - ) { - // set scrollTop of first parent that scrolls - // if parent is larger than el, set as low as possible - // to get entire widget on screen - var offsetDiffDown = rect.bottom - innerHeightOrClientHeight; - var offsetDiffUp = rect.top; - var scrollEl = Utils.getScrollParent(el); - if (scrollEl != null) { - var prevScroll = scrollEl.scrollTop; - if (rect.top < 0 && distance < 0) { - // moving up - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp; - } - } else if (distance > 0) { - // moving down - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown; - } - } - // move widget y by amount scrolled - ui.position.top += scrollEl.scrollTop - prevScroll; - } + scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown; } + } + // move widget y by amount scrolled + ui.position.top += scrollEl.scrollTop - prevScroll; } - }; - - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - Utils.is_intercepted = obsolete(Utils.isIntercepted, 'is_intercepted', 'isIntercepted'); - - Utils.create_stylesheet = obsolete(Utils.createStylesheet, 'create_stylesheet', 'createStylesheet'); - - Utils.remove_stylesheet = obsolete(Utils.removeStylesheet, 'remove_stylesheet', 'removeStylesheet'); - - Utils.insert_css_rule = obsolete(Utils.insertCSSRule, 'insert_css_rule', 'insertCSSRule'); - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - - /** - * @class GridStackDragDropPlugin - * Base class for drag'n'drop plugin. - */ - function GridStackDragDropPlugin(grid) { - this.grid = grid; + } } + }; - GridStackDragDropPlugin.registeredPlugins = []; + // jscs:disable requireCamelCaseOrUpperCaseIdentifiers + Utils.is_intercepted = obsolete(Utils.isIntercepted, 'is_intercepted', 'isIntercepted'); - GridStackDragDropPlugin.registerPlugin = function(pluginClass) { - GridStackDragDropPlugin.registeredPlugins.push(pluginClass); - }; + Utils.create_stylesheet = obsolete(Utils.createStylesheet, 'create_stylesheet', 'createStylesheet'); - GridStackDragDropPlugin.prototype.resizable = function(el, opts) { - return this; - }; + Utils.remove_stylesheet = obsolete(Utils.removeStylesheet, 'remove_stylesheet', 'removeStylesheet'); - GridStackDragDropPlugin.prototype.draggable = function(el, opts) { - return this; - }; + Utils.insert_css_rule = obsolete(Utils.insertCSSRule, 'insert_css_rule', 'insertCSSRule'); + // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - GridStackDragDropPlugin.prototype.droppable = function(el, opts) { - return this; - }; + /** + * @class GridStackDragDropPlugin + * Base class for drag'n'drop plugin. + */ + function GridStackDragDropPlugin(grid) { + this.grid = grid; + } - GridStackDragDropPlugin.prototype.isDroppable = function(el) { - return false; - }; + GridStackDragDropPlugin.registeredPlugins = []; - GridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - return this; - }; + GridStackDragDropPlugin.registerPlugin = function(pluginClass) { + GridStackDragDropPlugin.registeredPlugins.push(pluginClass); + }; + GridStackDragDropPlugin.prototype.resizable = function(el, opts) { + return this; + }; - var idSeq = 0; + GridStackDragDropPlugin.prototype.draggable = function(el, opts) { + return this; + }; - var GridStackEngine = function(width, onchange, floatMode, height, items) { - this.width = width; - this.float = floatMode || false; - this.height = height || 0; + GridStackDragDropPlugin.prototype.droppable = function(el, opts) { + return this; + }; - this.nodes = items || []; - this.onchange = onchange || function() {}; + GridStackDragDropPlugin.prototype.isDroppable = function(el) { + return false; + }; - this._updateCounter = 0; - this._float = this.float; + GridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { + return this; + }; - this._addedNodes = []; - this._removedNodes = []; - }; - GridStackEngine.prototype.batchUpdate = function() { - this._updateCounter = 1; - this.float = true; - }; - - GridStackEngine.prototype.commit = function() { - if (this._updateCounter !== 0) { - this._updateCounter = 0; - this.float = this._float; - this._packNodes(); - this._notify(); - } - }; - - // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 - GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); - }; + var idSeq = 0; - GridStackEngine.prototype._fixCollisions = function(node) { - var self = this; - this._sortNodes(-1); + var GridStackEngine = function(width, onchange, floatMode, height, items) { + this.width = width; + this.float = floatMode || false; + this.height = height || 0; - var nn = node; - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - if (!this.float && !hasLocked) { - nn = {x: 0, y: node.y, width: this.width, height: node.height}; - } - while (true) { - var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); - if (typeof collisionNode == 'undefined') { - return; - } - this.moveNode(collisionNode, collisionNode.x, node.y + node.height, - collisionNode.width, collisionNode.height, true); - } - }; - - GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { - var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; - var collisionNode = this.nodes.find(function(n) { - return Utils.isIntercepted(n, nn); - }); - return collisionNode === null || typeof collisionNode === 'undefined'; - }; + this.nodes = items || []; + this.onchange = onchange || function() {}; - GridStackEngine.prototype._sortNodes = function(dir) { - this.nodes = Utils.sort(this.nodes, dir, this.width); - }; + this._updateCounter = 0; + this._float = this.float; - GridStackEngine.prototype._packNodes = function() { - this._sortNodes(); - - if (this.float) { - this.nodes.forEach(function(n, i) { - if (n._updating || typeof n._origY == 'undefined' || n.y == n._origY) { - return; - } - - var newY = n.y; - while (newY >= n._origY) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - - if (!collisionNode) { - n._dirty = true; - n.y = newY; - } - --newY; - } - }, this); - } else { - this.nodes.forEach(function(n, i) { - if (n.locked) { - return; - } - while (n.y > 0) { - var newY = n.y - 1; - var canBeMoved = i === 0; - - if (i > 0) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - canBeMoved = typeof collisionNode == 'undefined'; - } - - if (!canBeMoved) { - break; - } - n._dirty = n.y != newY; - n.y = newY; - } - }, this); - } - }; + this._addedNodes = []; + this._removedNodes = []; + }; - GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = node || {}; - // if we're missing position, have grid position us automatically (before we set them to 0,0) - if (node.x === undefined || node.y === undefined) { - node.autoPosition = true; - } - node = Utils.defaults(node, {width: 1, height: 1, x: 0, y: 0}); - - node.x = parseInt('' + node.x); - node.y = parseInt('' + node.y); - node.width = parseInt('' + node.width); - node.height = parseInt('' + node.height); - node.autoPosition = node.autoPosition || false; - node.noResize = node.noResize || false; - node.noMove = node.noMove || false; - - if (node.width > this.width) { - node.width = this.width; - } else if (node.width < 1) { - node.width = 1; - } + GridStackEngine.prototype.batchUpdate = function() { + this._updateCounter = 1; + this.float = true; + }; - if (node.height < 1) { - node.height = 1; - } + GridStackEngine.prototype.commit = function() { + if (this._updateCounter !== 0) { + this._updateCounter = 0; + this.float = this._float; + this._packNodes(); + this._notify(); + } + }; - if (node.x < 0) { - node.x = 0; - } + // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 + GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { + return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); + }; - if (node.x + node.width > this.width) { - if (resizing) { - node.width = this.width - node.x; - } else { - node.x = this.width - node.width; - } - } + GridStackEngine.prototype._fixCollisions = function(node) { + var self = this; + this._sortNodes(-1); - if (node.y < 0) { - node.y = 0; - } + var nn = node; + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); + if (!this.float && !hasLocked) { + nn = {x: 0, y: node.y, width: this.width, height: node.height}; + } + while (true) { + var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); + if (typeof collisionNode == 'undefined') { + return; + } + this.moveNode(collisionNode, collisionNode.x, node.y + node.height, + collisionNode.width, collisionNode.height, true); + } + }; + + GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { + var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; + var collisionNode = this.nodes.find(function(n) { + return Utils.isIntercepted(n, nn); + }); + return collisionNode === null || typeof collisionNode === 'undefined'; + }; + + GridStackEngine.prototype._sortNodes = function(dir) { + this.nodes = Utils.sort(this.nodes, dir, this.width); + }; + + GridStackEngine.prototype._packNodes = function() { + this._sortNodes(); + + if (this.float) { + this.nodes.forEach(function(n, i) { + if (n._updating || typeof n._origY == 'undefined' || n.y == n._origY) { + return; + } + + var newY = n.y; + while (newY >= n._origY) { + var collisionNode = this.nodes + .slice(0, i) + .find(Utils._didCollide, {n: n, newY: newY}); + + if (!collisionNode) { + n._dirty = true; + n.y = newY; + } + --newY; + } + }, this); + } else { + this.nodes.forEach(function(n, i) { + if (n.locked) { + return; + } + while (n.y > 0) { + var newY = n.y - 1; + var canBeMoved = i === 0; + + if (i > 0) { + var collisionNode = this.nodes + .slice(0, i) + .find(Utils._didCollide, {n: n, newY: newY}); + canBeMoved = typeof collisionNode == 'undefined'; + } + + if (!canBeMoved) { + break; + } + n._dirty = n.y != newY; + n.y = newY; + } + }, this); + } + }; - return node; - }; + GridStackEngine.prototype._prepareNode = function(node, resizing) { + node = node || {}; + // if we're missing position, have grid position us automatically (before we set them to 0,0) + if (node.x === undefined || node.y === undefined) { + node.autoPosition = true; + } + node = Utils.defaults(node, {width: 1, height: 1, x: 0, y: 0}); + + node.x = parseInt('' + node.x); + node.y = parseInt('' + node.y); + node.width = parseInt('' + node.width); + node.height = parseInt('' + node.height); + node.autoPosition = node.autoPosition || false; + node.noResize = node.noResize || false; + node.noMove = node.noMove || false; + + if (node.width > this.width) { + node.width = this.width; + } else if (node.width < 1) { + node.width = 1; + } - GridStackEngine.prototype._notify = function() { - var args = Array.prototype.slice.call(arguments, 0); - args[0] = typeof args[0] === 'undefined' ? [] : [args[0]]; - args[1] = typeof args[1] === 'undefined' ? true : args[1]; - if (this._updateCounter) { - return; - } - var deletedNodes = args[0].concat(this.getDirtyNodes()); - this.onchange(deletedNodes, args[1]); - }; + if (node.height < 1) { + node.height = 1; + } - GridStackEngine.prototype.cleanNodes = function() { - if (this._updateCounter) { - return; - } - this.nodes.forEach(function(n) { n._dirty = false; }); - }; + if (node.x < 0) { + node.x = 0; + } - GridStackEngine.prototype.getDirtyNodes = function() { - return this.nodes.filter(function(n) { return n._dirty; }); - }; + if (node.x + node.width > this.width) { + if (resizing) { + node.width = this.width - node.x; + } else { + node.x = this.width - node.width; + } + } - GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { - node = this._prepareNode(node); - - if (typeof node.maxWidth != 'undefined') { node.width = Math.min(node.width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { node.height = Math.min(node.height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { node.width = Math.max(node.width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { node.height = Math.max(node.height, node.minHeight); } - - node._id = ++idSeq; - node._dirty = true; - - if (node.autoPosition) { - this._sortNodes(); - - for (var i = 0;; ++i) { - var x = i % this.width; - var y = Math.floor(i / this.width); - if (x + node.width > this.width) { - continue; - } - if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { - node.x = x; - node.y = y; - break; - } - } - } + if (node.y < 0) { + node.y = 0; + } - this.nodes.push(node); - if (typeof triggerAddEvent != 'undefined' && triggerAddEvent) { - this._addedNodes.push(Utils.clone(node)); - } + return node; + }; - this._fixCollisions(node); - this._packNodes(); - this._notify(); - return node; - }; + GridStackEngine.prototype._notify = function() { + var args = Array.prototype.slice.call(arguments, 0); + args[0] = typeof args[0] === 'undefined' ? [] : [args[0]]; + args[1] = typeof args[1] === 'undefined' ? true : args[1]; + if (this._updateCounter) { + return; + } + var deletedNodes = args[0].concat(this.getDirtyNodes()); + this.onchange(deletedNodes, args[1]); + }; - GridStackEngine.prototype.removeNode = function(node, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - this._removedNodes.push(Utils.clone(node)); - node._id = null; - this.nodes = Utils.without(this.nodes, node); - this._packNodes(); - this._notify(node, detachNode); - }; + GridStackEngine.prototype.cleanNodes = function() { + if (this._updateCounter) { + return; + } + this.nodes.forEach(function(n) { n._dirty = false; }); + }; - GridStackEngine.prototype.canMoveNode = function(node, x, y, width, height) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return false; - } - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); + GridStackEngine.prototype.getDirtyNodes = function() { + return this.nodes.filter(function(n) { return n._dirty; }); + }; - if (!this.height && !hasLocked) { - return true; - } + GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { + node = this._prepareNode(node); - var clonedNode; - var clone = new GridStackEngine( - this.width, - null, - this.float, - 0, - this.nodes.map(function(n) { - if (n == node) { - clonedNode = $.extend({}, n); - return clonedNode; - } - return $.extend({}, n); - })); - - if (typeof clonedNode === 'undefined') { - return true; - } + if (typeof node.maxWidth != 'undefined') { node.width = Math.min(node.width, node.maxWidth); } + if (typeof node.maxHeight != 'undefined') { node.height = Math.min(node.height, node.maxHeight); } + if (typeof node.minWidth != 'undefined') { node.width = Math.max(node.width, node.minWidth); } + if (typeof node.minHeight != 'undefined') { node.height = Math.max(node.height, node.minHeight); } - clone.moveNode(clonedNode, x, y, width, height); + node._id = ++idSeq; + node._dirty = true; - var res = true; + if (node.autoPosition) { + this._sortNodes(); - if (hasLocked) { - res &= !Boolean(clone.nodes.find(function(n) { - return n != clonedNode && Boolean(n.locked) && Boolean(n._dirty); - })); + for (var i = 0;; ++i) { + var x = i % this.width; + var y = Math.floor(i / this.width); + if (x + node.width > this.width) { + continue; } - if (this.height) { - res &= clone.getGridHeight() <= this.height; - } - - return res; - }; - - GridStackEngine.prototype.canBePlacedWithRespectToHeight = function(node) { - if (!this.height) { - return true; + if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { + node.x = x; + node.y = y; + break; } + } + } - var clone = new GridStackEngine( - this.width, - null, - this.float, - 0, - this.nodes.map(function(n) { return $.extend({}, n); })); - clone.addNode(node); - return clone.getGridHeight() <= this.height; - }; + this.nodes.push(node); + if (typeof triggerAddEvent != 'undefined' && triggerAddEvent) { + this._addedNodes.push(Utils.clone(node)); + } - GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) { - if (typeof x != 'number') { x = node.x; } - if (typeof y != 'number') { y = node.y; } - if (typeof width != 'number') { width = node.width; } - if (typeof height != 'number') { height = node.height; } + this._fixCollisions(node); + this._packNodes(); + this._notify(); + return node; + }; + + GridStackEngine.prototype.removeNode = function(node, detachNode) { + detachNode = typeof detachNode === 'undefined' ? true : detachNode; + this._removedNodes.push(Utils.clone(node)); + node._id = null; + this.nodes = Utils.without(this.nodes, node); + this._packNodes(); + this._notify(node, detachNode); + }; + + GridStackEngine.prototype.canMoveNode = function(node, x, y, width, height) { + if (!this.isNodeChangedPosition(node, x, y, width, height)) { + return false; + } + var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } + if (!this.height && !hasLocked) { + return true; + } - if (node.x == x && node.y == y && node.width == width && node.height == height) { - return false; - } - return true; - }; + var clonedNode; + var clone = new GridStackEngine( + this.width, + null, + this.float, + 0, + this.nodes.map(function(n) { + if (n == node) { + clonedNode = $.extend({}, n); + return clonedNode; + } + return $.extend({}, n); + })); + + if (typeof clonedNode === 'undefined') { + return true; + } - GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return node; - } - if (typeof x != 'number') { x = node.x; } - if (typeof y != 'number') { y = node.y; } - if (typeof width != 'number') { width = node.width; } - if (typeof height != 'number') { height = node.height; } - - if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } - if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } - if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } - if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } - - if (node.x == x && node.y == y && node.width == width && node.height == height) { - return node; - } + clone.moveNode(clonedNode, x, y, width, height); - var resizing = node.width != width; - node._dirty = true; + var res = true; - node.x = x; - node.y = y; - node.width = width; - node.height = height; + if (hasLocked) { + res &= !Boolean(clone.nodes.find(function(n) { + return n != clonedNode && Boolean(n.locked) && Boolean(n._dirty); + })); + } + if (this.height) { + res &= clone.getGridHeight() <= this.height; + } - node.lastTriedX = x; - node.lastTriedY = y; - node.lastTriedWidth = width; - node.lastTriedHeight = height; + return res; + }; - node = this._prepareNode(node, resizing); + GridStackEngine.prototype.canBePlacedWithRespectToHeight = function(node) { + if (!this.height) { + return true; + } - this._fixCollisions(node); - if (!noPack) { - this._packNodes(); - this._notify(); - } - return node; - }; + var clone = new GridStackEngine( + this.width, + null, + this.float, + 0, + this.nodes.map(function(n) { return $.extend({}, n); })); + clone.addNode(node); + return clone.getGridHeight() <= this.height; + }; + + GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) { + if (typeof x != 'number') { x = node.x; } + if (typeof y != 'number') { y = node.y; } + if (typeof width != 'number') { width = node.width; } + if (typeof height != 'number') { height = node.height; } + + if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } + if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } + if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } + if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } + + if (node.x == x && node.y == y && node.width == width && node.height == height) { + return false; + } + return true; + }; - GridStackEngine.prototype.getGridHeight = function() { - return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); - }; + GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { + if (!this.isNodeChangedPosition(node, x, y, width, height)) { + return node; + } + if (typeof x != 'number') { x = node.x; } + if (typeof y != 'number') { y = node.y; } + if (typeof width != 'number') { width = node.width; } + if (typeof height != 'number') { height = node.height; } + + if (typeof node.maxWidth != 'undefined') { width = Math.min(width, node.maxWidth); } + if (typeof node.maxHeight != 'undefined') { height = Math.min(height, node.maxHeight); } + if (typeof node.minWidth != 'undefined') { width = Math.max(width, node.minWidth); } + if (typeof node.minHeight != 'undefined') { height = Math.max(height, node.minHeight); } + + if (node.x == x && node.y == y && node.width == width && node.height == height) { + return node; + } - GridStackEngine.prototype.beginUpdate = function(node) { - this.nodes.forEach(function(n) { - n._origY = n.y; - }); - node._updating = true; - }; + var resizing = node.width != width; + node._dirty = true; - GridStackEngine.prototype.endUpdate = function() { - this.nodes.forEach(function(n) { - n._origY = n.y; - }); - var n = this.nodes.find(function(n) { return n._updating; }); - if (n) { - n._updating = false; - } - }; + node.x = x; + node.y = y; + node.width = width; + node.height = height; - var GridStack = function(el, opts) { - var self = this; - var oneColumnMode, isAutoCellHeight; + node.lastTriedX = x; + node.lastTriedY = y; + node.lastTriedWidth = width; + node.lastTriedHeight = height; - opts = opts || {}; + node = this._prepareNode(node, resizing); - this.container = $(el); + this._fixCollisions(node); + if (!noPack) { + this._packNodes(); + this._notify(); + } + return node; + }; + + GridStackEngine.prototype.getGridHeight = function() { + return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); + }; + + GridStackEngine.prototype.beginUpdate = function(node) { + this.nodes.forEach(function(n) { + n._origY = n.y; + }); + node._updating = true; + }; + + GridStackEngine.prototype.endUpdate = function() { + this.nodes.forEach(function(n) { + n._origY = n.y; + }); + var n = this.nodes.find(function(n) { return n._updating; }); + if (n) { + n._updating = false; + } + }; - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - if (typeof opts.handle_class !== 'undefined') { - opts.handleClass = opts.handle_class; - obsoleteOpts('handle_class', 'handleClass'); - } - if (typeof opts.item_class !== 'undefined') { - opts.itemClass = opts.item_class; - obsoleteOpts('item_class', 'itemClass'); - } - if (typeof opts.placeholder_class !== 'undefined') { - opts.placeholderClass = opts.placeholder_class; - obsoleteOpts('placeholder_class', 'placeholderClass'); - } - if (typeof opts.placeholder_text !== 'undefined') { - opts.placeholderText = opts.placeholder_text; - obsoleteOpts('placeholder_text', 'placeholderText'); - } - if (typeof opts.cell_height !== 'undefined') { - opts.cellHeight = opts.cell_height; - obsoleteOpts('cell_height', 'cellHeight'); - } - if (typeof opts.vertical_margin !== 'undefined') { - opts.verticalMargin = opts.vertical_margin; - obsoleteOpts('vertical_margin', 'verticalMargin'); - } - if (typeof opts.min_width !== 'undefined') { - opts.minWidth = opts.min_width; - obsoleteOpts('min_width', 'minWidth'); - } - if (typeof opts.static_grid !== 'undefined') { - opts.staticGrid = opts.static_grid; - obsoleteOpts('static_grid', 'staticGrid'); - } - if (typeof opts.is_nested !== 'undefined') { - opts.isNested = opts.is_nested; - obsoleteOpts('is_nested', 'isNested'); - } - if (typeof opts.always_show_resize_handle !== 'undefined') { - opts.alwaysShowResizeHandle = opts.always_show_resize_handle; - obsoleteOpts('always_show_resize_handle', 'alwaysShowResizeHandle'); - } - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - - opts.itemClass = opts.itemClass || 'grid-stack-item'; - var isNested = this.container.closest('.' + opts.itemClass).length > 0; - - this.opts = Utils.defaults(opts || {}, { - width: parseInt(this.container.attr('data-gs-width')) || 12, - height: parseInt(this.container.attr('data-gs-height')) || 0, - itemClass: 'grid-stack-item', - placeholderClass: 'grid-stack-placeholder', - placeholderText: '', - handle: '.grid-stack-item-content', - handleClass: null, - cellHeight: 60, - verticalMargin: 20, - auto: true, - minWidth: 768, - float: false, - staticGrid: false, - _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), - animate: Boolean(this.container.attr('data-gs-animate')) || false, - alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: Utils.defaults(opts.resizable || {}, { - autoHide: !(opts.alwaysShowResizeHandle || false), - handles: 'se' - }), - draggable: Utils.defaults(opts.draggable || {}, { - handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || - '.grid-stack-item-content', - scroll: false, - appendTo: 'body' - }), - disableDrag: opts.disableDrag || false, - disableResize: opts.disableResize || false, - rtl: 'auto', - removable: false, - removableOptions: Utils.defaults(opts.removableOptions || {}, { - accept: '.' + opts.itemClass - }), - removeTimeout: 2000, - verticalMarginUnit: 'px', - cellHeightUnit: 'px', - disableOneColumnMode: opts.disableOneColumnMode || false, - oneColumnModeClass: opts.oneColumnModeClass || 'grid-stack-one-column-mode', - ddPlugin: null - }); + var GridStack = function(el, opts) { + var self = this; + var oneColumnMode, isAutoCellHeight; - if (this.opts.ddPlugin === false) { - this.opts.ddPlugin = GridStackDragDropPlugin; - } else if (this.opts.ddPlugin === null) { - this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; - } + opts = opts || {}; - this.dd = new this.opts.ddPlugin(this); + this.container = $(el); - if (this.opts.rtl === 'auto') { - this.opts.rtl = this.container.css('direction') === 'rtl'; - } + // jscs:disable requireCamelCaseOrUpperCaseIdentifiers + if (typeof opts.handle_class !== 'undefined') { + opts.handleClass = opts.handle_class; + obsoleteOpts('handle_class', 'handleClass'); + } + if (typeof opts.item_class !== 'undefined') { + opts.itemClass = opts.item_class; + obsoleteOpts('item_class', 'itemClass'); + } + if (typeof opts.placeholder_class !== 'undefined') { + opts.placeholderClass = opts.placeholder_class; + obsoleteOpts('placeholder_class', 'placeholderClass'); + } + if (typeof opts.placeholder_text !== 'undefined') { + opts.placeholderText = opts.placeholder_text; + obsoleteOpts('placeholder_text', 'placeholderText'); + } + if (typeof opts.cell_height !== 'undefined') { + opts.cellHeight = opts.cell_height; + obsoleteOpts('cell_height', 'cellHeight'); + } + if (typeof opts.vertical_margin !== 'undefined') { + opts.verticalMargin = opts.vertical_margin; + obsoleteOpts('vertical_margin', 'verticalMargin'); + } + if (typeof opts.min_width !== 'undefined') { + opts.minWidth = opts.min_width; + obsoleteOpts('min_width', 'minWidth'); + } + if (typeof opts.static_grid !== 'undefined') { + opts.staticGrid = opts.static_grid; + obsoleteOpts('static_grid', 'staticGrid'); + } + if (typeof opts.is_nested !== 'undefined') { + opts.isNested = opts.is_nested; + obsoleteOpts('is_nested', 'isNested'); + } + if (typeof opts.always_show_resize_handle !== 'undefined') { + opts.alwaysShowResizeHandle = opts.always_show_resize_handle; + obsoleteOpts('always_show_resize_handle', 'alwaysShowResizeHandle'); + } + // jscs:enable requireCamelCaseOrUpperCaseIdentifiers - if (this.opts.rtl) { - this.container.addClass('grid-stack-rtl'); - } + opts.itemClass = opts.itemClass || 'grid-stack-item'; + var isNested = this.container.closest('.' + opts.itemClass).length > 0; + + this.opts = Utils.defaults(opts || {}, { + width: parseInt(this.container.attr('data-gs-width')) || 12, + height: parseInt(this.container.attr('data-gs-height')) || 0, + itemClass: 'grid-stack-item', + placeholderClass: 'grid-stack-placeholder', + placeholderText: '', + handle: '.grid-stack-item-content', + handleClass: null, + cellHeight: 60, + verticalMargin: 20, + auto: true, + minWidth: 768, + float: false, + staticGrid: false, + _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), + animate: Boolean(this.container.attr('data-gs-animate')) || false, + alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, + resizable: Utils.defaults(opts.resizable || {}, { + autoHide: !(opts.alwaysShowResizeHandle || false), + handles: 'se' + }), + draggable: Utils.defaults(opts.draggable || {}, { + handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || + '.grid-stack-item-content', + scroll: false, + appendTo: 'body' + }), + disableDrag: opts.disableDrag || false, + disableResize: opts.disableResize || false, + rtl: 'auto', + removable: false, + removableOptions: Utils.defaults(opts.removableOptions || {}, { + accept: '.' + opts.itemClass + }), + removeTimeout: 2000, + verticalMarginUnit: 'px', + cellHeightUnit: 'px', + disableOneColumnMode: opts.disableOneColumnMode || false, + oneColumnModeClass: opts.oneColumnModeClass || 'grid-stack-one-column-mode', + ddPlugin: null + }); + + if (this.opts.ddPlugin === false) { + this.opts.ddPlugin = GridStackDragDropPlugin; + } else if (this.opts.ddPlugin === null) { + this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; + } - this.opts.isNested = isNested; + this.dd = new this.opts.ddPlugin(this); - isAutoCellHeight = this.opts.cellHeight === 'auto'; - if (isAutoCellHeight) { - self.cellHeight(self.cellWidth(), true); - } else { - this.cellHeight(this.opts.cellHeight, true); - } - this.verticalMargin(this.opts.verticalMargin, true); + if (this.opts.rtl === 'auto') { + this.opts.rtl = this.container.css('direction') === 'rtl'; + } - this.container.addClass(this.opts._class); + if (this.opts.rtl) { + this.container.addClass('grid-stack-rtl'); + } - this._setStaticClass(); + this.opts.isNested = isNested; - if (isNested) { - this.container.addClass('grid-stack-nested'); - } + isAutoCellHeight = this.opts.cellHeight === 'auto'; + if (isAutoCellHeight) { + self.cellHeight(self.cellWidth(), true); + } else { + this.cellHeight(this.opts.cellHeight, true); + } + this.verticalMargin(this.opts.verticalMargin, true); - this._initStyles(); - - this.grid = new GridStackEngine(this.opts.width, function(nodes, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - var maxHeight = 0; - this.nodes.forEach(function(n) { - maxHeight = Math.max(maxHeight, n.y + n.height); - }); - nodes.forEach(function(n) { - if (detachNode && n._id === null) { - if (n.el) { - n.el.remove(); - } - } else { - n.el - .attr('data-gs-x', n.x) - .attr('data-gs-y', n.y) - .attr('data-gs-width', n.width) - .attr('data-gs-height', n.height); - } - }); - self._updateStyles(maxHeight + 10); - }, this.opts.float, this.opts.height); - - if (this.opts.auto) { - var elements = []; - var _this = this; - this.container.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') - .each(function(index, el) { - el = $(el); - elements.push({ - el: el, - // if x,y are missing (autoPosition) add them to end of list - keep their respective DOM order - i: (parseInt(el.attr('data-gs-x')) || 100) + - (parseInt(el.attr('data-gs-y')) || 100) * _this.opts.width - }); - }); - Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(item) { - this._prepareElement(item.el); - }, this); - } + this.container.addClass(this.opts._class); - this.setAnimation(this.opts.animate); + this._setStaticClass(); - this.placeholder = $( - '
' + - '
' + this.opts.placeholderText + '
').hide(); + if (isNested) { + this.container.addClass('grid-stack-nested'); + } - this._updateContainerHeight(); + this._initStyles(); + + this.grid = new GridStackEngine(this.opts.width, function(nodes, detachNode) { + detachNode = typeof detachNode === 'undefined' ? true : detachNode; + var maxHeight = 0; + this.nodes.forEach(function(n) { + maxHeight = Math.max(maxHeight, n.y + n.height); + }); + nodes.forEach(function(n) { + if (detachNode && n._id === null) { + if (n.el) { + n.el.remove(); + } + } else { + n.el + .attr('data-gs-x', n.x) + .attr('data-gs-y', n.y) + .attr('data-gs-width', n.width) + .attr('data-gs-height', n.height); + } + }); + self._updateStyles(maxHeight + 10); + }, this.opts.float, this.opts.height); + + if (this.opts.auto) { + var elements = []; + var _this = this; + this.container.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') + .each(function(index, el) { + el = $(el); + elements.push({ + el: el, + // if x,y are missing (autoPosition) add them to end of list - keep their respective DOM order + i: (parseInt(el.attr('data-gs-x')) || 100) + + (parseInt(el.attr('data-gs-y')) || 100) * _this.opts.width + }); + }); + Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(item) { + this._prepareElement(item.el); + }, this); + } - this._updateHeightsOnResize = Utils.throttle(function() { - self.cellHeight(self.cellWidth(), false); - }, 100); + this.setAnimation(this.opts.animate); - this.onResizeHandler = function() { - if (isAutoCellHeight) { - self._updateHeightsOnResize(); - } + this.placeholder = $( + '
' + + '
' + this.opts.placeholderText + '
').hide(); - if (self._isOneColumnMode() && !self.opts.disableOneColumnMode) { - if (oneColumnMode) { - return; - } - self.container.addClass(self.opts.oneColumnModeClass); - oneColumnMode = true; - - self.grid._sortNodes(); - self.grid.nodes.forEach(function(node) { - self.container.append(node.el); - - if (self.opts.staticGrid) { - return; - } - self.dd.draggable(node.el, 'disable'); - self.dd.resizable(node.el, 'disable'); - - node.el.trigger('resize'); - }); - } else { - if (!oneColumnMode) { - return; - } - - self.container.removeClass(self.opts.oneColumnModeClass); - oneColumnMode = false; - - if (self.opts.staticGrid) { - return; - } - - self.grid.nodes.forEach(function(node) { - if (!node.noMove && !self.opts.disableDrag) { - self.dd.draggable(node.el, 'enable'); - } - if (!node.noResize && !self.opts.disableResize) { - self.dd.resizable(node.el, 'enable'); - } - - node.el.trigger('resize'); - }); - } - }; + this._updateContainerHeight(); - $(window).resize(this.onResizeHandler); - this.onResizeHandler(); + this._updateHeightsOnResize = Utils.throttle(function() { + self.cellHeight(self.cellWidth(), false); + }, 100); - if (!self.opts.staticGrid && typeof self.opts.removable === 'string') { - var trashZone = $(self.opts.removable); - if (!this.dd.isDroppable(trashZone)) { - this.dd.droppable(trashZone, self.opts.removableOptions); - } - this.dd - .on(trashZone, 'dropover', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (node._grid !== self) { - return; - } - el.data('inTrashZone', true); - self._setupRemovingTimeout(el); - }) - .on(trashZone, 'dropout', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (node._grid !== self) { - return; - } - el.data('inTrashZone', false); - self._clearRemovingTimeout(el); - }); - } + this.onResizeHandler = function() { + if (isAutoCellHeight) { + self._updateHeightsOnResize(); + } - if (!self.opts.staticGrid && self.opts.acceptWidgets) { - var draggingElement = null; - - var onDrag = function(event, ui) { - var el = draggingElement; - var node = el.data('_gridstack_node'); - var pos = self.getCellFromPixel({left: event.pageX, top: event.pageY}, true); - var x = Math.max(0, pos.x); - var y = Math.max(0, pos.y); - if (!node._added) { - node._added = true; - - node.el = el; - node.autoPosition = true; - node.x = x; - node.y = y; - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - self.grid.addNode(node); - - self.container.append(self.placeholder); - self.placeholder - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .show(); - node.el = self.placeholder; - node._beforeDragX = node.x; - node._beforeDragY = node.y; - - self._updateContainerHeight(); - } - if (!self.grid.canMoveNode(node, x, y)) { - return; - } - self.grid.moveNode(node, x, y); - self._updateContainerHeight(); - }; - - this.dd - .droppable(self.container, { - accept: function(el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (node && node._grid === self) { - return false; - } - return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets); - } - }) - .on(self.container, 'dropover', function(event, ui) { - var offset = self.container.offset(); - var el = $(ui.draggable); - var cellWidth = self.cellWidth(); - var cellHeight = self.cellHeight(); - var origNode = el.data('_gridstack_node'); - - var width = origNode ? origNode.width : (Math.ceil(el.outerWidth() / cellWidth)); - var height = origNode ? origNode.height : (Math.ceil(el.outerHeight() / cellHeight)); - - draggingElement = el; - - var node = self.grid._prepareNode({width: width, height: height, _added: false, _temporary: true}); - el.data('_gridstack_node', node); - el.data('_gridstack_node_orig', origNode); - - el.on('drag', onDrag); - }) - .on(self.container, 'dropout', function(event, ui) { - var el = $(ui.draggable); - if (!el.data('_gridstack_node')) { - return; - } - el.unbind('drag', onDrag); - var node = el.data('_gridstack_node'); - node.el = null; - self.grid.removeNode(node); - self.placeholder.detach(); - self._updateContainerHeight(); - el.data('_gridstack_node', el.data('_gridstack_node_orig')); - }) - .on(self.container, 'drop', function(event, ui) { - self.placeholder.detach(); - - var node = $(ui.draggable).data('_gridstack_node'); - node._grid = self; - var el = $(ui.draggable).clone(false); - el.data('_gridstack_node', node); - var originalNode = $(ui.draggable).data('_gridstack_node_orig'); - if (typeof originalNode !== 'undefined' && typeof originalNode._grid !== 'undefined') { - originalNode._grid._triggerRemoveEvent(); - } - $(ui.helper).remove(); - node.el = el; - self.placeholder.hide(); - Utils.removePositioningStyles(el); - el.find('div.ui-resizable-handle').remove(); - - el - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .addClass(self.opts.itemClass) - .enableSelection() - .removeData('draggable') - .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') - .unbind('drag', onDrag); - self.container.append(el); - self._prepareElementsByNode(el, node); - self._updateContainerHeight(); - self.grid._addedNodes.push(node); - self._triggerAddEvent(); - self._triggerChangeEvent(); - - self.grid.endUpdate(); - $(ui.draggable).unbind('drag', onDrag); - $(ui.draggable).removeData('_gridstack_node'); - $(ui.draggable).removeData('_gridstack_node_orig'); - self.container.trigger('dropped', [originalNode, node]); - }); + if (self._isOneColumnMode() && !self.opts.disableOneColumnMode) { + if (oneColumnMode) { + return; } - }; + self.container.addClass(self.opts.oneColumnModeClass); + oneColumnMode = true; - GridStack.prototype._triggerChangeEvent = function(forceTrigger) { - var elements = this.grid.getDirtyNodes(); - var hasChanges = false; + self.grid._sortNodes(); + self.grid.nodes.forEach(function(node) { + self.container.append(node.el); - var eventParams = []; - if (elements && elements.length) { - eventParams.push(elements); - hasChanges = true; - } + if (self.opts.staticGrid) { + return; + } + self.dd.draggable(node.el, 'disable'); + self.dd.resizable(node.el, 'disable'); - if (hasChanges || forceTrigger === true) { - this.container.trigger('change', eventParams); + node.el.trigger('resize'); + }); + } else { + if (!oneColumnMode) { + return; } - }; - GridStack.prototype._triggerAddEvent = function() { - if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { - this.container.trigger('added', [this.grid._addedNodes.map(Utils.clone)]); - this.grid._addedNodes = []; - } - }; + self.container.removeClass(self.opts.oneColumnModeClass); + oneColumnMode = false; - GridStack.prototype._triggerRemoveEvent = function() { - if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { - this.container.trigger('removed', [this.grid._removedNodes.map(Utils.clone)]); - this.grid._removedNodes = []; + if (self.opts.staticGrid) { + return; } - }; - GridStack.prototype._initStyles = function() { - if (this._stylesId) { - Utils.removeStylesheet(this._stylesId); - } - this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); - this._styles = Utils.createStylesheet(this._stylesId); - if (this._styles !== null) { - this._styles._max = 0; - } - }; + self.grid.nodes.forEach(function(node) { + if (!node.noMove && !self.opts.disableDrag) { + self.dd.draggable(node.el, 'enable'); + } + if (!node.noResize && !self.opts.disableResize) { + self.dd.resizable(node.el, 'enable'); + } - GridStack.prototype._updateStyles = function(maxHeight) { - if (this._styles === null || typeof this._styles === 'undefined') { + node.el.trigger('resize'); + }); + } + }; + + $(window).resize(this.onResizeHandler); + this.onResizeHandler(); + + if (!self.opts.staticGrid && typeof self.opts.removable === 'string') { + var trashZone = $(self.opts.removable); + if (!this.dd.isDroppable(trashZone)) { + this.dd.droppable(trashZone, self.opts.removableOptions); + } + this.dd + .on(trashZone, 'dropover', function(event, ui) { + var el = $(ui.draggable); + var node = el.data('_gridstack_node'); + if (node._grid !== self) { return; - } - - var prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; - var self = this; - var getHeight; - - if (typeof maxHeight == 'undefined') { - maxHeight = this._styles._max; - } - this._initStyles(); - this._updateContainerHeight(); - if (!this.opts.cellHeight) { // The rest will be handled by CSS - return ; - } - if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep this._styles._max increasing - return ; - } + } + el.data('inTrashZone', true); + self._setupRemovingTimeout(el); + }) + .on(trashZone, 'dropout', function(event, ui) { + var el = $(ui.draggable); + var node = el.data('_gridstack_node'); + if (node._grid !== self) { + return; + } + el.data('inTrashZone', false); + self._clearRemovingTimeout(el); + }); + } - if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - getHeight = function(nbRows, nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - }; - } else { - getHeight = function(nbRows, nbMargins) { - if (!nbRows || !nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - } - return 'calc(' + ((self.opts.cellHeight * nbRows) + self.opts.cellHeightUnit) + ' + ' + - ((self.opts.verticalMargin * nbMargins) + self.opts.verticalMarginUnit) + ')'; - }; - } + if (!self.opts.staticGrid && self.opts.acceptWidgets) { + var draggingElement = null; - if (this._styles._max === 0) { - Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); - } + var onDrag = function(event, ui) { + var el = draggingElement; + var node = el.data('_gridstack_node'); + var pos = self.getCellFromPixel({left: event.pageX, top: event.pageY}, true); + var x = Math.max(0, pos.x); + var y = Math.max(0, pos.y); + if (!node._added) { + node._added = true; + + node.el = el; + node.autoPosition = true; + node.x = x; + node.y = y; + self.grid.cleanNodes(); + self.grid.beginUpdate(node); + self.grid.addNode(node); + + self.container.append(self.placeholder); + self.placeholder + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height) + .show(); + node.el = self.placeholder; + node._beforeDragX = node.x; + node._beforeDragY = node.y; + + self._updateContainerHeight(); + } + if (!self.grid.canMoveNode(node, x, y)) { + return; + } + self.grid.moveNode(node, x, y); + self._updateContainerHeight(); + }; - if (maxHeight > this._styles._max) { - for (var i = this._styles._max; i < maxHeight; ++i) { - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-height="' + (i + 1) + '"]', - 'height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-min-height="' + (i + 1) + '"]', - 'min-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-max-height="' + (i + 1) + '"]', - 'max-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-y="' + i + '"]', - 'top: ' + getHeight(i, i) + ';', - i - ); + this.dd + .droppable(self.container, { + accept: function(el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (node && node._grid === self) { + return false; } - this._styles._max = maxHeight; - } - }; - - GridStack.prototype._updateContainerHeight = function() { - if (this.grid._updateCounter) { + return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets); + } + }) + .on(self.container, 'dropover', function(event, ui) { + var offset = self.container.offset(); + var el = $(ui.draggable); + var cellWidth = self.cellWidth(); + var cellHeight = self.cellHeight(); + var origNode = el.data('_gridstack_node'); + + var width = origNode ? origNode.width : (Math.ceil(el.outerWidth() / cellWidth)); + var height = origNode ? origNode.height : (Math.ceil(el.outerHeight() / cellHeight)); + + draggingElement = el; + + var node = self.grid._prepareNode({width: width, height: height, _added: false, _temporary: true}); + el.data('_gridstack_node', node); + el.data('_gridstack_node_orig', origNode); + + el.on('drag', onDrag); + }) + .on(self.container, 'dropout', function(event, ui) { + var el = $(ui.draggable); + if (!el.data('_gridstack_node')) { return; - } - var height = this.grid.getGridHeight(); - // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below - var cssMinHeight = parseInt(this.container.css('min-height')); - if (cssMinHeight > 0) { - var minHeight = (cssMinHeight + this.opts.verticalMargin) / (this.cellHeight() + this.opts.verticalMargin); - if (height < minHeight) { - height = minHeight; - } - } - this.container.attr('data-gs-current-height', height); - if (!this.opts.cellHeight) { - return ; - } - if (!this.opts.verticalMargin) { - this.container.css('height', (height * (this.opts.cellHeight)) + this.opts.cellHeightUnit); - } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - this.container.css('height', (height * (this.opts.cellHeight + this.opts.verticalMargin) - - this.opts.verticalMargin) + this.opts.cellHeightUnit); - } else { - this.container.css('height', 'calc(' + ((height * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + - ' + ' + ((height * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); - } - }; - - GridStack.prototype._isOneColumnMode = function() { - return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= - this.opts.minWidth; - }; + } + el.unbind('drag', onDrag); + var node = el.data('_gridstack_node'); + node.el = null; + self.grid.removeNode(node); + self.placeholder.detach(); + self._updateContainerHeight(); + el.data('_gridstack_node', el.data('_gridstack_node_orig')); + }) + .on(self.container, 'drop', function(event, ui) { + self.placeholder.detach(); + + var node = $(ui.draggable).data('_gridstack_node'); + node._grid = self; + var el = $(ui.draggable).clone(false); + el.data('_gridstack_node', node); + var originalNode = $(ui.draggable).data('_gridstack_node_orig'); + if (typeof originalNode !== 'undefined' && typeof originalNode._grid !== 'undefined') { + originalNode._grid._triggerRemoveEvent(); + } + $(ui.helper).remove(); + node.el = el; + self.placeholder.hide(); + Utils.removePositioningStyles(el); + el.find('div.ui-resizable-handle').remove(); + + el + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height) + .addClass(self.opts.itemClass) + .enableSelection() + .removeData('draggable') + .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') + .unbind('drag', onDrag); + self.container.append(el); + self._prepareElementsByNode(el, node); + self._updateContainerHeight(); + self.grid._addedNodes.push(node); + self._triggerAddEvent(); + self._triggerChangeEvent(); + + self.grid.endUpdate(); + $(ui.draggable).unbind('drag', onDrag); + $(ui.draggable).removeData('_gridstack_node'); + $(ui.draggable).removeData('_gridstack_node_orig'); + self.container.trigger('dropped', [originalNode, node]); + }); + } + }; - GridStack.prototype._setupRemovingTimeout = function(el) { - var self = this; - var node = $(el).data('_gridstack_node'); + GridStack.prototype._triggerChangeEvent = function(forceTrigger) { + var elements = this.grid.getDirtyNodes(); + var hasChanges = false; - if (node._removeTimeout || !self.opts.removable) { - return; - } - node._removeTimeout = setTimeout(function() { - el.addClass('grid-stack-item-removing'); - node._isAboutToRemove = true; - }, self.opts.removeTimeout); - }; + var eventParams = []; + if (elements && elements.length) { + eventParams.push(elements); + hasChanges = true; + } - GridStack.prototype._clearRemovingTimeout = function(el) { - var node = $(el).data('_gridstack_node'); + if (hasChanges || forceTrigger === true) { + this.container.trigger('change', eventParams); + } + }; - if (!node._removeTimeout) { - return; - } - clearTimeout(node._removeTimeout); - node._removeTimeout = null; - el.removeClass('grid-stack-item-removing'); - node._isAboutToRemove = false; - }; + GridStack.prototype._triggerAddEvent = function() { + if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { + this.container.trigger('added', [this.grid._addedNodes.map(Utils.clone)]); + this.grid._addedNodes = []; + } + }; - GridStack.prototype._prepareElementsByNode = function(el, node) { - var self = this; + GridStack.prototype._triggerRemoveEvent = function() { + if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { + this.container.trigger('removed', [this.grid._removedNodes.map(Utils.clone)]); + this.grid._removedNodes = []; + } + }; - var cellWidth; - var cellHeight; + GridStack.prototype._initStyles = function() { + if (this._stylesId) { + Utils.removeStylesheet(this._stylesId); + } + this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); + this._styles = Utils.createStylesheet(this._stylesId); + if (this._styles !== null) { + this._styles._max = 0; + } + }; - var dragOrResize = function(event, ui) { - var x = Math.round(ui.position.left / cellWidth); - var y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); - var width; - var height; + GridStack.prototype._updateStyles = function(maxHeight) { + if (this._styles === null || typeof this._styles === 'undefined') { + return; + } - if (event.type != 'drag') { - width = Math.round(ui.size.width / cellWidth); - height = Math.round(ui.size.height / cellHeight); - } + var prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; + var self = this; + var getHeight; - if (event.type == 'drag') { - var distance = ui.position.top - node._prevYPix; - node._prevYPix = ui.position.top; - Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.grid.width || y < 0 || - (!self.grid.float && y > self.grid.getGridHeight())) { - if (!node._temporaryRemoved) { - if (self.opts.removable === true) { - self._setupRemovingTimeout(el); - } - - x = node._beforeDragX; - y = node._beforeDragY; - - self.placeholder.detach(); - self.placeholder.hide(); - self.grid.removeNode(node); - self._updateContainerHeight(); - - node._temporaryRemoved = true; - } else { - return; - } - } else { - self._clearRemovingTimeout(el); - - if (node._temporaryRemoved) { - self.grid.addNode(node); - self.placeholder - .attr('data-gs-x', x) - .attr('data-gs-y', y) - .attr('data-gs-width', width) - .attr('data-gs-height', height) - .show(); - self.container.append(self.placeholder); - node.el = self.placeholder; - node._temporaryRemoved = false; - } - } - } else if (event.type == 'resize') { - if (x < 0) { - return; - } - } - // width and height are undefined if not resizing - var lastTriedWidth = typeof width !== 'undefined' ? width : node.lastTriedWidth; - var lastTriedHeight = typeof height !== 'undefined' ? height : node.lastTriedHeight; - if (!self.grid.canMoveNode(node, x, y, width, height) || - (node.lastTriedX === x && node.lastTriedY === y && - node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) { - return; - } - node.lastTriedX = x; - node.lastTriedY = y; - node.lastTriedWidth = width; - node.lastTriedHeight = height; - self.grid.moveNode(node, x, y, width, height); - self._updateContainerHeight(); + if (typeof maxHeight == 'undefined') { + maxHeight = this._styles._max; + } + this._initStyles(); + this._updateContainerHeight(); + if (!this.opts.cellHeight) { // The rest will be handled by CSS + return ; + } + if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep this._styles._max increasing + return ; + } - if (event.type == 'resize') { - $(event.target).trigger('gsresize', node); - } - }; + if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { + getHeight = function(nbRows, nbMargins) { + return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + + self.opts.cellHeightUnit; + }; + } else { + getHeight = function(nbRows, nbMargins) { + if (!nbRows || !nbMargins) { + return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + + self.opts.cellHeightUnit; + } + return 'calc(' + ((self.opts.cellHeight * nbRows) + self.opts.cellHeightUnit) + ' + ' + + ((self.opts.verticalMargin * nbMargins) + self.opts.verticalMarginUnit) + ')'; + }; + } - var onStartMoving = function(event, ui) { - self.container.append(self.placeholder); - var o = $(this); - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - cellWidth = self.cellWidth(); - var strictCellHeight = Math.ceil(o.outerHeight() / o.attr('data-gs-height')); - cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); - self.placeholder - .attr('data-gs-x', o.attr('data-gs-x')) - .attr('data-gs-y', o.attr('data-gs-y')) - .attr('data-gs-width', o.attr('data-gs-width')) - .attr('data-gs-height', o.attr('data-gs-height')) - .show(); - node.el = self.placeholder; - node._beforeDragX = node.x; - node._beforeDragY = node.y; - node._prevYPix = ui.position.top; + if (this._styles._max === 0) { + Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); + } - self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - self.dd.resizable(el, 'option', 'minHeight', strictCellHeight * (node.minHeight || 1)); + if (maxHeight > this._styles._max) { + for (var i = this._styles._max; i < maxHeight; ++i) { + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-height="' + (i + 1) + '"]', + 'height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-min-height="' + (i + 1) + '"]', + 'min-height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-max-height="' + (i + 1) + '"]', + 'max-height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-y="' + i + '"]', + 'top: ' + getHeight(i, i) + ';', + i + ); + } + this._styles._max = maxHeight; + } + }; - if (event.type == 'resizestart') { - o.find('.grid-stack-item').trigger('resizestart'); - } - }; + GridStack.prototype._updateContainerHeight = function() { + if (this.grid._updateCounter) { + return; + } + var height = this.grid.getGridHeight(); + // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below + var cssMinHeight = parseInt(this.container.css('min-height')); + if (cssMinHeight > 0) { + var minHeight = (cssMinHeight + this.opts.verticalMargin) / (this.cellHeight() + this.opts.verticalMargin); + if (height < minHeight) { + height = minHeight; + } + } + this.container.attr('data-gs-current-height', height); + if (!this.opts.cellHeight) { + return ; + } + if (!this.opts.verticalMargin) { + this.container.css('height', (height * (this.opts.cellHeight)) + this.opts.cellHeightUnit); + } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { + this.container.css('height', (height * (this.opts.cellHeight + this.opts.verticalMargin) - + this.opts.verticalMargin) + this.opts.cellHeightUnit); + } else { + this.container.css('height', 'calc(' + ((height * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + + ' + ' + ((height * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); + } + }; - var onEndMoving = function(event, ui) { - var o = $(this); - if (!o.data('_gridstack_node')) { - return; - } + GridStack.prototype._isOneColumnMode = function() { + return (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= + this.opts.minWidth; + }; - var forceNotify = false; - self.placeholder.detach(); - node.el = o; - self.placeholder.hide(); + GridStack.prototype._setupRemovingTimeout = function(el) { + var self = this; + var node = $(el).data('_gridstack_node'); - if (node._isAboutToRemove) { - forceNotify = true; - var gridToNotify = el.data('_gridstack_node')._grid; - gridToNotify._triggerRemoveEvent(); - el.removeData('_gridstack_node'); - el.remove(); - } else { - self._clearRemovingTimeout(el); - if (!node._temporaryRemoved) { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - } else { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node._beforeDragX) - .attr('data-gs-y', node._beforeDragY) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - node.x = node._beforeDragX; - node.y = node._beforeDragY; - node._temporaryRemoved = false; - self.grid.addNode(node); - } - } - self._updateContainerHeight(); - self._triggerChangeEvent(forceNotify); + if (node._removeTimeout || !self.opts.removable) { + return; + } + node._removeTimeout = setTimeout(function() { + el.addClass('grid-stack-item-removing'); + node._isAboutToRemove = true; + }, self.opts.removeTimeout); + }; - self.grid.endUpdate(); + GridStack.prototype._clearRemovingTimeout = function(el) { + var node = $(el).data('_gridstack_node'); - var nestedGrids = o.find('.grid-stack'); - if (nestedGrids.length && event.type == 'resizestop') { - nestedGrids.each(function(index, el) { - $(el).data('gridstack').onResizeHandler(); - }); - o.find('.grid-stack-item').trigger('resizestop'); - o.find('.grid-stack-item').trigger('gsresizestop'); - } - if (event.type == 'resizestop') { - self.container.trigger('gsresizestop', o); + if (!node._removeTimeout) { + return; + } + clearTimeout(node._removeTimeout); + node._removeTimeout = null; + el.removeClass('grid-stack-item-removing'); + node._isAboutToRemove = false; + }; + + GridStack.prototype._prepareElementsByNode = function(el, node) { + var self = this; + + var cellWidth; + var cellHeight; + + var dragOrResize = function(event, ui) { + var x = Math.round(ui.position.left / cellWidth); + var y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); + var width; + var height; + + if (event.type != 'drag') { + width = Math.round(ui.size.width / cellWidth); + height = Math.round(ui.size.height / cellHeight); + } + + if (event.type == 'drag') { + var distance = ui.position.top - node._prevYPix; + node._prevYPix = ui.position.top; + Utils.updateScrollPosition(el[0], ui, distance); + if (el.data('inTrashZone') || x < 0 || x >= self.grid.width || y < 0 || + (!self.grid.float && y > self.grid.getGridHeight())) { + if (!node._temporaryRemoved) { + if (self.opts.removable === true) { + self._setupRemovingTimeout(el); } - }; - - this.dd - .draggable(el, { - start: onStartMoving, - stop: onEndMoving, - drag: dragOrResize - }) - .resizable(el, { - start: onStartMoving, - stop: onEndMoving, - resize: dragOrResize - }); - - if (node.noMove || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableDrag || - this.opts.staticGrid) { - this.dd.draggable(el, 'disable'); - } - if (node.noResize || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableResize || - this.opts.staticGrid) { - this.dd.resizable(el, 'disable'); - } - - el.attr('data-gs-locked', node.locked ? 'yes' : null); - }; + x = node._beforeDragX; + y = node._beforeDragY; - GridStack.prototype._prepareElement = function(el, triggerAddEvent) { - triggerAddEvent = typeof triggerAddEvent != 'undefined' ? triggerAddEvent : false; - var self = this; - el = $(el); - - el.addClass(this.opts.itemClass); - var node = self.grid.addNode({ - x: el.attr('data-gs-x'), - y: el.attr('data-gs-y'), - width: el.attr('data-gs-width'), - height: el.attr('data-gs-height'), - maxWidth: el.attr('data-gs-max-width'), - minWidth: el.attr('data-gs-min-width'), - maxHeight: el.attr('data-gs-max-height'), - minHeight: el.attr('data-gs-min-height'), - autoPosition: Utils.toBool(el.attr('data-gs-auto-position')), - noResize: Utils.toBool(el.attr('data-gs-no-resize')), - noMove: Utils.toBool(el.attr('data-gs-no-move')), - locked: Utils.toBool(el.attr('data-gs-locked')), - resizeHandles: el.attr('data-gs-resize-handles'), - el: el, - id: el.attr('data-gs-id'), - _grid: self - }, triggerAddEvent); - el.data('_gridstack_node', node); - - this._prepareElementsByNode(el, node); - }; + self.placeholder.detach(); + self.placeholder.hide(); + self.grid.removeNode(node); + self._updateContainerHeight(); - GridStack.prototype.setAnimation = function(enable) { - if (enable) { - this.container.addClass('grid-stack-animate'); + node._temporaryRemoved = true; + } else { + return; + } } else { - this.container.removeClass('grid-stack-animate'); - } - }; - - GridStack.prototype.addWidget = function(el, x, y, width, height, autoPosition, minWidth, maxWidth, - minHeight, maxHeight, id) { - el = $(el); - if (typeof x != 'undefined') { el.attr('data-gs-x', x); } - if (typeof y != 'undefined') { el.attr('data-gs-y', y); } - if (typeof width != 'undefined') { el.attr('data-gs-width', width); } - if (typeof height != 'undefined') { el.attr('data-gs-height', height); } - if (typeof autoPosition != 'undefined') { el.attr('data-gs-auto-position', autoPosition ? 'yes' : null); } - if (typeof minWidth != 'undefined') { el.attr('data-gs-min-width', minWidth); } - if (typeof maxWidth != 'undefined') { el.attr('data-gs-max-width', maxWidth); } - if (typeof minHeight != 'undefined') { el.attr('data-gs-min-height', minHeight); } - if (typeof maxHeight != 'undefined') { el.attr('data-gs-max-height', maxHeight); } - if (typeof id != 'undefined') { el.attr('data-gs-id', id); } - this.container.append(el); - this._prepareElement(el, true); - this._triggerAddEvent(); - this._updateContainerHeight(); - this._triggerChangeEvent(true); - - return el; - }; - - GridStack.prototype.makeWidget = function(el) { - el = $(el); - this._prepareElement(el, true); - this._triggerAddEvent(); - this._updateContainerHeight(); - this._triggerChangeEvent(true); - - return el; - }; - - GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) { - var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; - return this.grid.canBePlacedWithRespectToHeight(node); - }; - - GridStack.prototype.removeWidget = function(el, detachNode) { - detachNode = typeof detachNode === 'undefined' ? true : detachNode; - el = $(el); - var node = el.data('_gridstack_node'); + self._clearRemovingTimeout(el); - // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 - if (!node) { - node = this.grid.getNodeDataByDOMEl(el); - } - - this.grid.removeNode(node, detachNode); + if (node._temporaryRemoved) { + self.grid.addNode(node); + self.placeholder + .attr('data-gs-x', x) + .attr('data-gs-y', y) + .attr('data-gs-width', width) + .attr('data-gs-height', height) + .show(); + self.container.append(self.placeholder); + node.el = self.placeholder; + node._temporaryRemoved = false; + } + } + } else if (event.type == 'resize') { + if (x < 0) { + return; + } + } + // width and height are undefined if not resizing + var lastTriedWidth = typeof width !== 'undefined' ? width : node.lastTriedWidth; + var lastTriedHeight = typeof height !== 'undefined' ? height : node.lastTriedHeight; + if (!self.grid.canMoveNode(node, x, y, width, height) || + (node.lastTriedX === x && node.lastTriedY === y && + node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) { + return; + } + node.lastTriedX = x; + node.lastTriedY = y; + node.lastTriedWidth = width; + node.lastTriedHeight = height; + self.grid.moveNode(node, x, y, width, height); + self._updateContainerHeight(); + + if (event.type == 'resize') { + $(event.target).trigger('gsresize', node); + } + }; + + var onStartMoving = function(event, ui) { + self.container.append(self.placeholder); + var o = $(this); + self.grid.cleanNodes(); + self.grid.beginUpdate(node); + cellWidth = self.cellWidth(); + var strictCellHeight = Math.ceil(o.outerHeight() / o.attr('data-gs-height')); + cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); + self.placeholder + .attr('data-gs-x', o.attr('data-gs-x')) + .attr('data-gs-y', o.attr('data-gs-y')) + .attr('data-gs-width', o.attr('data-gs-width')) + .attr('data-gs-height', o.attr('data-gs-height')) + .show(); + node.el = self.placeholder; + node._beforeDragX = node.x; + node._beforeDragY = node.y; + node._prevYPix = ui.position.top; + + self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); + self.dd.resizable(el, 'option', 'minHeight', strictCellHeight * (node.minHeight || 1)); + + if (event.type == 'resizestart') { + o.find('.grid-stack-item').trigger('resizestart'); + } + }; + + var onEndMoving = function(event, ui) { + var o = $(this); + if (!o.data('_gridstack_node')) { + return; + } + + var forceNotify = false; + self.placeholder.detach(); + node.el = o; + self.placeholder.hide(); + + if (node._isAboutToRemove) { + forceNotify = true; + var gridToNotify = el.data('_gridstack_node')._grid; + gridToNotify._triggerRemoveEvent(); el.removeData('_gridstack_node'); - this._updateContainerHeight(); - if (detachNode) { - el.remove(); - } - this._triggerChangeEvent(true); - this._triggerRemoveEvent(); - }; - - GridStack.prototype.removeAll = function(detachNode) { - this.grid.nodes.forEach(function(node) { - this.removeWidget(node.el, detachNode); - }, this); - this.grid.nodes = []; - this._updateContainerHeight(); - }; - - GridStack.prototype.destroy = function(detachGrid) { - $(window).off('resize', this.onResizeHandler); - this.disable(); - if (typeof detachGrid != 'undefined' && !detachGrid) { - this.removeAll(false); - this.container.removeData('gridstack'); + el.remove(); + } else { + self._clearRemovingTimeout(el); + if (!node._temporaryRemoved) { + Utils.removePositioningStyles(o); + o + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height); } else { - this.container.remove(); - } - Utils.removeStylesheet(this._stylesId); - if (this.grid) { - this.grid = null; - } - }; - - GridStack.prototype.resizable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.noResize = !(val || false); - if (node.noResize || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { - self.dd.resizable(el, 'disable'); - } else { - self.dd.resizable(el, 'enable'); - } + Utils.removePositioningStyles(o); + o + .attr('data-gs-x', node._beforeDragX) + .attr('data-gs-y', node._beforeDragY) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height); + node.x = node._beforeDragX; + node.y = node._beforeDragY; + node._temporaryRemoved = false; + self.grid.addNode(node); + } + } + self._updateContainerHeight(); + self._triggerChangeEvent(forceNotify); + + self.grid.endUpdate(); + + var nestedGrids = o.find('.grid-stack'); + if (nestedGrids.length && event.type == 'resizestop') { + nestedGrids.each(function(index, el) { + $(el).data('gridstack').onResizeHandler(); }); - return this; - }; - - GridStack.prototype.movable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.noMove = !(val || false); - if (node.noMove || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { - self.dd.draggable(el, 'disable'); - el.removeClass('ui-draggable-handle'); - } else { - self.dd.draggable(el, 'enable'); - el.addClass('ui-draggable-handle'); - } - }); - return this; - }; - - GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) { - this.movable(this.container.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableDrag = !doEnable; - } - }; - - GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) { - this.resizable(this.container.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableResize = !doEnable; - } - }; - - GridStack.prototype.disable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), false); - this.resizable(this.container.children('.' + this.opts.itemClass), false); - this.container.trigger('disable'); - }; - - GridStack.prototype.enable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), true); - this.resizable(this.container.children('.' + this.opts.itemClass), true); - this.container.trigger('enable'); - }; - - GridStack.prototype.locked = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - node.locked = (val || false); - el.attr('data-gs-locked', node.locked ? 'yes' : null); - }); - return this; - }; - - GridStack.prototype.maxHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.maxHeight = (val || false); - el.attr('data-gs-max-height', val); - } - }); - return this; - }; - - GridStack.prototype.minHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.minHeight = (val || false); - el.attr('data-gs-min-height', val); - } - }); - return this; - }; - - GridStack.prototype.maxWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.maxWidth = (val || false); - el.attr('data-gs-max-width', val); - } - }); - return this; - }; - - GridStack.prototype.minWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (typeof node === 'undefined' || node === null) { - return; - } - - if (!isNaN(val)) { - node.minWidth = (val || false); - el.attr('data-gs-min-width', val); - } - }); - return this; - }; - - GridStack.prototype._updateElement = function(el, callback) { - el = $(el).first(); - var node = el.data('_gridstack_node'); - if (typeof node == 'undefined' || node === null) { - return; - } - - var self = this; - - self.grid.cleanNodes(); - self.grid.beginUpdate(node); + o.find('.grid-stack-item').trigger('resizestop'); + o.find('.grid-stack-item').trigger('gsresizestop'); + } + if (event.type == 'resizestop') { + self.container.trigger('gsresizestop', o); + } + }; + + this.dd + .draggable(el, { + start: onStartMoving, + stop: onEndMoving, + drag: dragOrResize + }) + .resizable(el, { + start: onStartMoving, + stop: onEndMoving, + resize: dragOrResize + }); + + if (node.noMove || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableDrag || + this.opts.staticGrid) { + this.dd.draggable(el, 'disable'); + } - callback.call(this, el, node); + if (node.noResize || (this._isOneColumnMode() && !self.opts.disableOneColumnMode) || this.opts.disableResize || + this.opts.staticGrid) { + this.dd.resizable(el, 'disable'); + } - self._updateContainerHeight(); - self._triggerChangeEvent(); + el.attr('data-gs-locked', node.locked ? 'yes' : null); + }; + + GridStack.prototype._prepareElement = function(el, triggerAddEvent) { + triggerAddEvent = typeof triggerAddEvent != 'undefined' ? triggerAddEvent : false; + var self = this; + el = $(el); + + el.addClass(this.opts.itemClass); + var node = self.grid.addNode({ + x: el.attr('data-gs-x'), + y: el.attr('data-gs-y'), + width: el.attr('data-gs-width'), + height: el.attr('data-gs-height'), + maxWidth: el.attr('data-gs-max-width'), + minWidth: el.attr('data-gs-min-width'), + maxHeight: el.attr('data-gs-max-height'), + minHeight: el.attr('data-gs-min-height'), + autoPosition: Utils.toBool(el.attr('data-gs-auto-position')), + noResize: Utils.toBool(el.attr('data-gs-no-resize')), + noMove: Utils.toBool(el.attr('data-gs-no-move')), + locked: Utils.toBool(el.attr('data-gs-locked')), + resizeHandles: el.attr('data-gs-resize-handles'), + el: el, + id: el.attr('data-gs-id'), + _grid: self + }, triggerAddEvent); + el.data('_gridstack_node', node); + + this._prepareElementsByNode(el, node); + }; + + GridStack.prototype.setAnimation = function(enable) { + if (enable) { + this.container.addClass('grid-stack-animate'); + } else { + this.container.removeClass('grid-stack-animate'); + } + }; + + GridStack.prototype.addWidget = function(el, x, y, width, height, autoPosition, minWidth, maxWidth, + minHeight, maxHeight, id) { + el = $(el); + if (typeof x != 'undefined') { el.attr('data-gs-x', x); } + if (typeof y != 'undefined') { el.attr('data-gs-y', y); } + if (typeof width != 'undefined') { el.attr('data-gs-width', width); } + if (typeof height != 'undefined') { el.attr('data-gs-height', height); } + if (typeof autoPosition != 'undefined') { el.attr('data-gs-auto-position', autoPosition ? 'yes' : null); } + if (typeof minWidth != 'undefined') { el.attr('data-gs-min-width', minWidth); } + if (typeof maxWidth != 'undefined') { el.attr('data-gs-max-width', maxWidth); } + if (typeof minHeight != 'undefined') { el.attr('data-gs-min-height', minHeight); } + if (typeof maxHeight != 'undefined') { el.attr('data-gs-max-height', maxHeight); } + if (typeof id != 'undefined') { el.attr('data-gs-id', id); } + this.container.append(el); + this._prepareElement(el, true); + this._triggerAddEvent(); + this._updateContainerHeight(); + this._triggerChangeEvent(true); + + return el; + }; + + GridStack.prototype.makeWidget = function(el) { + el = $(el); + this._prepareElement(el, true); + this._triggerAddEvent(); + this._updateContainerHeight(); + this._triggerChangeEvent(true); + + return el; + }; + + GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) { + var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; + return this.grid.canBePlacedWithRespectToHeight(node); + }; + + GridStack.prototype.removeWidget = function(el, detachNode) { + detachNode = typeof detachNode === 'undefined' ? true : detachNode; + el = $(el); + var node = el.data('_gridstack_node'); - self.grid.endUpdate(); - }; + // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 + if (!node) { + node = this.grid.getNodeDataByDOMEl(el); + } - GridStack.prototype.resize = function(el, width, height) { - this._updateElement(el, function(el, node) { - width = (width !== null && typeof width != 'undefined') ? width : node.width; - height = (height !== null && typeof height != 'undefined') ? height : node.height; + this.grid.removeNode(node, detachNode); + el.removeData('_gridstack_node'); + this._updateContainerHeight(); + if (detachNode) { + el.remove(); + } + this._triggerChangeEvent(true); + this._triggerRemoveEvent(); + }; + + GridStack.prototype.removeAll = function(detachNode) { + this.grid.nodes.forEach(function(node) { + this.removeWidget(node.el, detachNode); + }, this); + this.grid.nodes = []; + this._updateContainerHeight(); + }; + + GridStack.prototype.destroy = function(detachGrid) { + $(window).off('resize', this.onResizeHandler); + this.disable(); + if (typeof detachGrid != 'undefined' && !detachGrid) { + this.removeAll(false); + this.container.removeData('gridstack'); + } else { + this.container.remove(); + } + Utils.removeStylesheet(this._stylesId); + if (this.grid) { + this.grid = null; + } + }; + + GridStack.prototype.resizable = function(el, val) { + var self = this; + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node == 'undefined' || node === null) { + return; + } + + node.noResize = !(val || false); + if (node.noResize || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { + self.dd.resizable(el, 'disable'); + } else { + self.dd.resizable(el, 'enable'); + } + }); + return this; + }; + + GridStack.prototype.movable = function(el, val) { + var self = this; + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node == 'undefined' || node === null) { + return; + } + + node.noMove = !(val || false); + if (node.noMove || (self._isOneColumnMode() && !self.opts.disableOneColumnMode)) { + self.dd.draggable(el, 'disable'); + el.removeClass('ui-draggable-handle'); + } else { + self.dd.draggable(el, 'enable'); + el.addClass('ui-draggable-handle'); + } + }); + return this; + }; + + GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) { + this.movable(this.container.children('.' + this.opts.itemClass), doEnable); + if (includeNewWidgets) { + this.opts.disableDrag = !doEnable; + } + }; - this.grid.moveNode(node, node.x, node.y, width, height); - }); - }; + GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) { + this.resizable(this.container.children('.' + this.opts.itemClass), doEnable); + if (includeNewWidgets) { + this.opts.disableResize = !doEnable; + } + }; + + GridStack.prototype.disable = function() { + this.movable(this.container.children('.' + this.opts.itemClass), false); + this.resizable(this.container.children('.' + this.opts.itemClass), false); + this.container.trigger('disable'); + }; + + GridStack.prototype.enable = function() { + this.movable(this.container.children('.' + this.opts.itemClass), true); + this.resizable(this.container.children('.' + this.opts.itemClass), true); + this.container.trigger('enable'); + }; + + GridStack.prototype.locked = function(el, val) { + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node == 'undefined' || node === null) { + return; + } + + node.locked = (val || false); + el.attr('data-gs-locked', node.locked ? 'yes' : null); + }); + return this; + }; + + GridStack.prototype.maxHeight = function(el, val) { + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node === 'undefined' || node === null) { + return; + } + + if (!isNaN(val)) { + node.maxHeight = (val || false); + el.attr('data-gs-max-height', val); + } + }); + return this; + }; + + GridStack.prototype.minHeight = function(el, val) { + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node === 'undefined' || node === null) { + return; + } + + if (!isNaN(val)) { + node.minHeight = (val || false); + el.attr('data-gs-min-height', val); + } + }); + return this; + }; + + GridStack.prototype.maxWidth = function(el, val) { + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node === 'undefined' || node === null) { + return; + } + + if (!isNaN(val)) { + node.maxWidth = (val || false); + el.attr('data-gs-max-width', val); + } + }); + return this; + }; + + GridStack.prototype.minWidth = function(el, val) { + el = $(el); + el.each(function(index, el) { + el = $(el); + var node = el.data('_gridstack_node'); + if (typeof node === 'undefined' || node === null) { + return; + } + + if (!isNaN(val)) { + node.minWidth = (val || false); + el.attr('data-gs-min-width', val); + } + }); + return this; + }; + + GridStack.prototype._updateElement = function(el, callback) { + el = $(el).first(); + var node = el.data('_gridstack_node'); + if (typeof node == 'undefined' || node === null) { + return; + } - GridStack.prototype.move = function(el, x, y) { - this._updateElement(el, function(el, node) { - x = (x !== null && typeof x != 'undefined') ? x : node.x; - y = (y !== null && typeof y != 'undefined') ? y : node.y; + var self = this; - this.grid.moveNode(node, x, y, node.width, node.height); - }); - }; + self.grid.cleanNodes(); + self.grid.beginUpdate(node); - GridStack.prototype.update = function(el, x, y, width, height) { - this._updateElement(el, function(el, node) { - x = (x !== null && typeof x != 'undefined') ? x : node.x; - y = (y !== null && typeof y != 'undefined') ? y : node.y; - width = (width !== null && typeof width != 'undefined') ? width : node.width; - height = (height !== null && typeof height != 'undefined') ? height : node.height; + callback.call(this, el, node); - this.grid.moveNode(node, x, y, width, height); - }); - }; + self._updateContainerHeight(); + self._triggerChangeEvent(); - GridStack.prototype.verticalMargin = function(val, noUpdate) { - if (typeof val == 'undefined') { - return this.opts.verticalMargin; - } + self.grid.endUpdate(); + }; - var heightData = Utils.parseHeight(val); + GridStack.prototype.resize = function(el, width, height) { + this._updateElement(el, function(el, node) { + width = (width !== null && typeof width != 'undefined') ? width : node.width; + height = (height !== null && typeof height != 'undefined') ? height : node.height; - if (this.opts.verticalMarginUnit === heightData.unit && this.opts.height === heightData.height) { - return ; - } - this.opts.verticalMarginUnit = heightData.unit; - this.opts.verticalMargin = heightData.height; + this.grid.moveNode(node, node.x, node.y, width, height); + }); + }; - if (!noUpdate) { - this._updateStyles(); - } - }; + GridStack.prototype.move = function(el, x, y) { + this._updateElement(el, function(el, node) { + x = (x !== null && typeof x != 'undefined') ? x : node.x; + y = (y !== null && typeof y != 'undefined') ? y : node.y; - GridStack.prototype.cellHeight = function(val, noUpdate) { - if (typeof val == 'undefined') { - if (this.opts.cellHeight) { - return this.opts.cellHeight; - } - var o = this.container.children('.' + this.opts.itemClass).first(); - return Math.ceil(o.outerHeight() / o.attr('data-gs-height')); - } - var heightData = Utils.parseHeight(val); + this.grid.moveNode(node, x, y, node.width, node.height); + }); + }; - if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { - return ; - } - this.opts.cellHeightUnit = heightData.unit; - this.opts.cellHeight = heightData.height; + GridStack.prototype.update = function(el, x, y, width, height) { + this._updateElement(el, function(el, node) { + x = (x !== null && typeof x != 'undefined') ? x : node.x; + y = (y !== null && typeof y != 'undefined') ? y : node.y; + width = (width !== null && typeof width != 'undefined') ? width : node.width; + height = (height !== null && typeof height != 'undefined') ? height : node.height; - if (!noUpdate) { - this._updateStyles(); - } + this.grid.moveNode(node, x, y, width, height); + }); + }; - }; + GridStack.prototype.verticalMargin = function(val, noUpdate) { + if (typeof val == 'undefined') { + return this.opts.verticalMargin; + } - GridStack.prototype.cellWidth = function() { - return Math.round(this.container.outerWidth() / this.opts.width); - }; + var heightData = Utils.parseHeight(val); - GridStack.prototype.getCellFromPixel = function(position, useOffset) { - var containerPos = (typeof useOffset != 'undefined' && useOffset) ? - this.container.offset() : this.container.position(); - var relativeLeft = position.left - containerPos.left; - var relativeTop = position.top - containerPos.top; + if (this.opts.verticalMarginUnit === heightData.unit && this.opts.height === heightData.height) { + return ; + } + this.opts.verticalMarginUnit = heightData.unit; + this.opts.verticalMargin = heightData.height; - var columnWidth = Math.floor(this.container.width() / this.opts.width); - var rowHeight = Math.floor(this.container.height() / parseInt(this.container.attr('data-gs-current-height'))); + if (!noUpdate) { + this._updateStyles(); + } + }; + + GridStack.prototype.cellHeight = function(val, noUpdate) { + if (typeof val == 'undefined') { + if (this.opts.cellHeight) { + return this.opts.cellHeight; + } + var o = this.container.children('.' + this.opts.itemClass).first(); + return Math.ceil(o.outerHeight() / o.attr('data-gs-height')); + } + var heightData = Utils.parseHeight(val); - return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; - }; + if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { + return ; + } + this.opts.cellHeightUnit = heightData.unit; + this.opts.cellHeight = heightData.height; - GridStack.prototype.batchUpdate = function() { - this.grid.batchUpdate(); - }; + if (!noUpdate) { + this._updateStyles(); + } - GridStack.prototype.commit = function() { - this.grid.commit(); - this._updateContainerHeight(); - }; + }; - GridStack.prototype.isAreaEmpty = function(x, y, width, height) { - return this.grid.isAreaEmpty(x, y, width, height); - }; + GridStack.prototype.cellWidth = function() { + return Math.round(this.container.outerWidth() / this.opts.width); + }; - GridStack.prototype.setStatic = function(staticValue) { - this.opts.staticGrid = (staticValue === true); - this.enableMove(!staticValue); - this.enableResize(!staticValue); - this._setStaticClass(); - }; + GridStack.prototype.getCellFromPixel = function(position, useOffset) { + var containerPos = (typeof useOffset != 'undefined' && useOffset) ? + this.container.offset() : this.container.position(); + var relativeLeft = position.left - containerPos.left; + var relativeTop = position.top - containerPos.top; - GridStack.prototype._setStaticClass = function() { - var staticClassName = 'grid-stack-static'; + var columnWidth = Math.floor(this.container.width() / this.opts.width); + var rowHeight = Math.floor(this.container.height() / parseInt(this.container.attr('data-gs-current-height'))); - if (this.opts.staticGrid === true) { - this.container.addClass(staticClassName); - } else { - this.container.removeClass(staticClassName); - } - }; + return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; + }; - GridStack.prototype._updateNodeWidths = function(oldWidth, newWidth) { - this.grid._sortNodes(); - this.grid.batchUpdate(); - var node = {}; - for (var i = 0; i < this.grid.nodes.length; i++) { - node = this.grid.nodes[i]; - this.update(node.el, Math.round(node.x * newWidth / oldWidth), undefined, - Math.round(node.width * newWidth / oldWidth), undefined); - } - this.grid.commit(); - }; + GridStack.prototype.batchUpdate = function() { + this.grid.batchUpdate(); + }; - GridStack.prototype.setGridWidth = function(gridWidth,doNotPropagate) { - this.container.removeClass('grid-stack-' + this.opts.width); - if (doNotPropagate !== true) { - this._updateNodeWidths(this.opts.width, gridWidth); - } - this.opts.width = gridWidth; - this.grid.width = gridWidth; - this.container.addClass('grid-stack-' + gridWidth); - }; + GridStack.prototype.commit = function() { + this.grid.commit(); + this._updateContainerHeight(); + }; - // jscs:disable requireCamelCaseOrUpperCaseIdentifiers - GridStackEngine.prototype.batch_update = obsolete(GridStackEngine.prototype.batchUpdate); - GridStackEngine.prototype._fix_collisions = obsolete(GridStackEngine.prototype._fixCollisions, - '_fix_collisions', '_fixCollisions'); - GridStackEngine.prototype.is_area_empty = obsolete(GridStackEngine.prototype.isAreaEmpty, - 'is_area_empty', 'isAreaEmpty'); - GridStackEngine.prototype._sort_nodes = obsolete(GridStackEngine.prototype._sortNodes, - '_sort_nodes', '_sortNodes'); - GridStackEngine.prototype._pack_nodes = obsolete(GridStackEngine.prototype._packNodes, - '_pack_nodes', '_packNodes'); - GridStackEngine.prototype._prepare_node = obsolete(GridStackEngine.prototype._prepareNode, - '_prepare_node', '_prepareNode'); - GridStackEngine.prototype.clean_nodes = obsolete(GridStackEngine.prototype.cleanNodes, - 'clean_nodes', 'cleanNodes'); - GridStackEngine.prototype.get_dirty_nodes = obsolete(GridStackEngine.prototype.getDirtyNodes, - 'get_dirty_nodes', 'getDirtyNodes'); - GridStackEngine.prototype.add_node = obsolete(GridStackEngine.prototype.addNode, - 'add_node', 'addNode, '); - GridStackEngine.prototype.remove_node = obsolete(GridStackEngine.prototype.removeNode, - 'remove_node', 'removeNode'); - GridStackEngine.prototype.can_move_node = obsolete(GridStackEngine.prototype.canMoveNode, - 'can_move_node', 'canMoveNode'); - GridStackEngine.prototype.move_node = obsolete(GridStackEngine.prototype.moveNode, - 'move_node', 'moveNode'); - GridStackEngine.prototype.get_grid_height = obsolete(GridStackEngine.prototype.getGridHeight, - 'get_grid_height', 'getGridHeight'); - GridStackEngine.prototype.begin_update = obsolete(GridStackEngine.prototype.beginUpdate, - 'begin_update', 'beginUpdate'); - GridStackEngine.prototype.end_update = obsolete(GridStackEngine.prototype.endUpdate, - 'end_update', 'endUpdate'); - GridStackEngine.prototype.can_be_placed_with_respect_to_height = - obsolete(GridStackEngine.prototype.canBePlacedWithRespectToHeight, - 'can_be_placed_with_respect_to_height', 'canBePlacedWithRespectToHeight'); - GridStack.prototype._trigger_change_event = obsolete(GridStack.prototype._triggerChangeEvent, - '_trigger_change_event', '_triggerChangeEvent'); - GridStack.prototype._init_styles = obsolete(GridStack.prototype._initStyles, - '_init_styles', '_initStyles'); - GridStack.prototype._update_styles = obsolete(GridStack.prototype._updateStyles, - '_update_styles', '_updateStyles'); - GridStack.prototype._update_container_height = obsolete(GridStack.prototype._updateContainerHeight, - '_update_container_height', '_updateContainerHeight'); - GridStack.prototype._is_one_column_mode = obsolete(GridStack.prototype._isOneColumnMode, - '_is_one_column_mode','_isOneColumnMode'); - GridStack.prototype._prepare_element = obsolete(GridStack.prototype._prepareElement, - '_prepare_element', '_prepareElement'); - GridStack.prototype.set_animation = obsolete(GridStack.prototype.setAnimation, - 'set_animation', 'setAnimation'); - GridStack.prototype.add_widget = obsolete(GridStack.prototype.addWidget, - 'add_widget', 'addWidget'); - GridStack.prototype.make_widget = obsolete(GridStack.prototype.makeWidget, - 'make_widget', 'makeWidget'); - GridStack.prototype.will_it_fit = obsolete(GridStack.prototype.willItFit, - 'will_it_fit', 'willItFit'); - GridStack.prototype.remove_widget = obsolete(GridStack.prototype.removeWidget, - 'remove_widget', 'removeWidget'); - GridStack.prototype.remove_all = obsolete(GridStack.prototype.removeAll, - 'remove_all', 'removeAll'); - GridStack.prototype.min_height = obsolete(GridStack.prototype.minHeight, - 'min_height', 'minHeight'); - GridStack.prototype.min_width = obsolete(GridStack.prototype.minWidth, - 'min_width', 'minWidth'); - GridStack.prototype._update_element = obsolete(GridStack.prototype._updateElement, - '_update_element', '_updateElement'); - GridStack.prototype.cell_height = obsolete(GridStack.prototype.cellHeight, - 'cell_height', 'cellHeight'); - GridStack.prototype.cell_width = obsolete(GridStack.prototype.cellWidth, - 'cell_width', 'cellWidth'); - GridStack.prototype.get_cell_from_pixel = obsolete(GridStack.prototype.getCellFromPixel, - 'get_cell_from_pixel', 'getCellFromPixel'); - GridStack.prototype.batch_update = obsolete(GridStack.prototype.batchUpdate, - 'batch_update', 'batchUpdate'); - GridStack.prototype.is_area_empty = obsolete(GridStack.prototype.isAreaEmpty, - 'is_area_empty', 'isAreaEmpty'); - GridStack.prototype.set_static = obsolete(GridStack.prototype.setStatic, - 'set_static', 'setStatic'); - GridStack.prototype._set_static_class = obsolete(GridStack.prototype._setStaticClass, - '_set_static_class', '_setStaticClass'); - // jscs:enable requireCamelCaseOrUpperCaseIdentifiers + GridStack.prototype.isAreaEmpty = function(x, y, width, height) { + return this.grid.isAreaEmpty(x, y, width, height); + }; - scope.GridStackUI = GridStack; + GridStack.prototype.setStatic = function(staticValue) { + this.opts.staticGrid = (staticValue === true); + this.enableMove(!staticValue); + this.enableResize(!staticValue); + this._setStaticClass(); + }; - scope.GridStackUI.Utils = Utils; - scope.GridStackUI.Engine = GridStackEngine; - scope.GridStackUI.GridStackDragDropPlugin = GridStackDragDropPlugin; + GridStack.prototype._setStaticClass = function() { + var staticClassName = 'grid-stack-static'; - $.fn.gridstack = function(opts) { - return this.each(function() { - var o = $(this); - if (!o.data('gridstack')) { - o - .data('gridstack', new GridStack(this, opts)); - } - }); - }; + if (this.opts.staticGrid === true) { + this.container.addClass(staticClassName); + } else { + this.container.removeClass(staticClassName); + } + }; + + GridStack.prototype._updateNodeWidths = function(oldWidth, newWidth) { + this.grid._sortNodes(); + this.grid.batchUpdate(); + var node = {}; + for (var i = 0; i < this.grid.nodes.length; i++) { + node = this.grid.nodes[i]; + this.update(node.el, Math.round(node.x * newWidth / oldWidth), undefined, + Math.round(node.width * newWidth / oldWidth), undefined); + } + this.grid.commit(); + }; - return scope.GridStackUI; + GridStack.prototype.setGridWidth = function(gridWidth,doNotPropagate) { + this.container.removeClass('grid-stack-' + this.opts.width); + if (doNotPropagate !== true) { + this._updateNodeWidths(this.opts.width, gridWidth); + } + this.opts.width = gridWidth; + this.grid.width = gridWidth; + this.container.addClass('grid-stack-' + gridWidth); + }; + + // jscs:disable requireCamelCaseOrUpperCaseIdentifiers + GridStackEngine.prototype.batch_update = obsolete(GridStackEngine.prototype.batchUpdate); + GridStackEngine.prototype._fix_collisions = obsolete(GridStackEngine.prototype._fixCollisions, + '_fix_collisions', '_fixCollisions'); + GridStackEngine.prototype.is_area_empty = obsolete(GridStackEngine.prototype.isAreaEmpty, + 'is_area_empty', 'isAreaEmpty'); + GridStackEngine.prototype._sort_nodes = obsolete(GridStackEngine.prototype._sortNodes, + '_sort_nodes', '_sortNodes'); + GridStackEngine.prototype._pack_nodes = obsolete(GridStackEngine.prototype._packNodes, + '_pack_nodes', '_packNodes'); + GridStackEngine.prototype._prepare_node = obsolete(GridStackEngine.prototype._prepareNode, + '_prepare_node', '_prepareNode'); + GridStackEngine.prototype.clean_nodes = obsolete(GridStackEngine.prototype.cleanNodes, + 'clean_nodes', 'cleanNodes'); + GridStackEngine.prototype.get_dirty_nodes = obsolete(GridStackEngine.prototype.getDirtyNodes, + 'get_dirty_nodes', 'getDirtyNodes'); + GridStackEngine.prototype.add_node = obsolete(GridStackEngine.prototype.addNode, + 'add_node', 'addNode, '); + GridStackEngine.prototype.remove_node = obsolete(GridStackEngine.prototype.removeNode, + 'remove_node', 'removeNode'); + GridStackEngine.prototype.can_move_node = obsolete(GridStackEngine.prototype.canMoveNode, + 'can_move_node', 'canMoveNode'); + GridStackEngine.prototype.move_node = obsolete(GridStackEngine.prototype.moveNode, + 'move_node', 'moveNode'); + GridStackEngine.prototype.get_grid_height = obsolete(GridStackEngine.prototype.getGridHeight, + 'get_grid_height', 'getGridHeight'); + GridStackEngine.prototype.begin_update = obsolete(GridStackEngine.prototype.beginUpdate, + 'begin_update', 'beginUpdate'); + GridStackEngine.prototype.end_update = obsolete(GridStackEngine.prototype.endUpdate, + 'end_update', 'endUpdate'); + GridStackEngine.prototype.can_be_placed_with_respect_to_height = + obsolete(GridStackEngine.prototype.canBePlacedWithRespectToHeight, + 'can_be_placed_with_respect_to_height', 'canBePlacedWithRespectToHeight'); + GridStack.prototype._trigger_change_event = obsolete(GridStack.prototype._triggerChangeEvent, + '_trigger_change_event', '_triggerChangeEvent'); + GridStack.prototype._init_styles = obsolete(GridStack.prototype._initStyles, + '_init_styles', '_initStyles'); + GridStack.prototype._update_styles = obsolete(GridStack.prototype._updateStyles, + '_update_styles', '_updateStyles'); + GridStack.prototype._update_container_height = obsolete(GridStack.prototype._updateContainerHeight, + '_update_container_height', '_updateContainerHeight'); + GridStack.prototype._is_one_column_mode = obsolete(GridStack.prototype._isOneColumnMode, + '_is_one_column_mode','_isOneColumnMode'); + GridStack.prototype._prepare_element = obsolete(GridStack.prototype._prepareElement, + '_prepare_element', '_prepareElement'); + GridStack.prototype.set_animation = obsolete(GridStack.prototype.setAnimation, + 'set_animation', 'setAnimation'); + GridStack.prototype.add_widget = obsolete(GridStack.prototype.addWidget, + 'add_widget', 'addWidget'); + GridStack.prototype.make_widget = obsolete(GridStack.prototype.makeWidget, + 'make_widget', 'makeWidget'); + GridStack.prototype.will_it_fit = obsolete(GridStack.prototype.willItFit, + 'will_it_fit', 'willItFit'); + GridStack.prototype.remove_widget = obsolete(GridStack.prototype.removeWidget, + 'remove_widget', 'removeWidget'); + GridStack.prototype.remove_all = obsolete(GridStack.prototype.removeAll, + 'remove_all', 'removeAll'); + GridStack.prototype.min_height = obsolete(GridStack.prototype.minHeight, + 'min_height', 'minHeight'); + GridStack.prototype.min_width = obsolete(GridStack.prototype.minWidth, + 'min_width', 'minWidth'); + GridStack.prototype._update_element = obsolete(GridStack.prototype._updateElement, + '_update_element', '_updateElement'); + GridStack.prototype.cell_height = obsolete(GridStack.prototype.cellHeight, + 'cell_height', 'cellHeight'); + GridStack.prototype.cell_width = obsolete(GridStack.prototype.cellWidth, + 'cell_width', 'cellWidth'); + GridStack.prototype.get_cell_from_pixel = obsolete(GridStack.prototype.getCellFromPixel, + 'get_cell_from_pixel', 'getCellFromPixel'); + GridStack.prototype.batch_update = obsolete(GridStack.prototype.batchUpdate, + 'batch_update', 'batchUpdate'); + GridStack.prototype.is_area_empty = obsolete(GridStack.prototype.isAreaEmpty, + 'is_area_empty', 'isAreaEmpty'); + GridStack.prototype.set_static = obsolete(GridStack.prototype.setStatic, + 'set_static', 'setStatic'); + GridStack.prototype._set_static_class = obsolete(GridStack.prototype._setStaticClass, + '_set_static_class', '_setStaticClass'); + // jscs:enable requireCamelCaseOrUpperCaseIdentifiers + + scope.GridStackUI = GridStack; + + scope.GridStackUI.Utils = Utils; + scope.GridStackUI.Engine = GridStackEngine; + scope.GridStackUI.GridStackDragDropPlugin = GridStackDragDropPlugin; + + $.fn.gridstack = function(opts) { + return this.each(function() { + var o = $(this); + if (!o.data('gridstack')) { + o + .data('gridstack', new GridStack(this, opts)); + } + }); + }; + + return scope.GridStackUI; }); diff --git a/src/gridstack.scss b/src/gridstack.scss index 57397bd7e..922a019d6 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -4,136 +4,136 @@ $vertical_padding: 20px !default; $animation_speed: .3s !default; @mixin vendor($property, $value...){ - -webkit-#{$property}:$value; - -moz-#{$property}:$value; - -ms-#{$property}:$value; - -o-#{$property}:$value; - #{$property}:$value; + -webkit-#{$property}: $value; + -moz-#{$property}: $value; + -ms-#{$property}: $value; + -o-#{$property}: $value; + #{$property}: $value; } :root .grid-stack-item > .ui-resizable-handle { filter: none; } .grid-stack { - position: relative; + position: relative; - &.grid-stack-rtl { - direction: ltr; + &.grid-stack-rtl { + direction: ltr; - > .grid-stack-item { - direction: rtl; - } + > .grid-stack-item { + direction: rtl; + } + } + + .grid-stack-placeholder > .placeholder-content { + border: 1px dashed lightgray; + margin: 0; + position: absolute; + top: 0; + left: $horizontal_padding / 2; + right: $horizontal_padding / 2; + bottom: 0; + width: auto; + z-index: 0 !important; + text-align: center; + } + + > .grid-stack-item { + min-width: 100% / $gridstack-columns; + position: absolute; + padding: 0; + + > .grid-stack-item-content { + margin: 0; + position: absolute; + top: 0; + left: $horizontal_padding / 2; + right: $horizontal_padding / 2; + bottom: 0; + width: auto; + overflow-x: hidden; + overflow-y: auto; } - .grid-stack-placeholder > .placeholder-content { - border: 1px dashed lightgray; - margin: 0; - position: absolute; - top: 0; - left: $horizontal_padding / 2; - right: $horizontal_padding / 2; - bottom: 0; - width: auto; - z-index: 0 !important; - text-align: center; + > .ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; } - > .grid-stack-item { - min-width: 100% / $gridstack-columns; - position: absolute; - padding: 0; - - > .grid-stack-item-content { - margin: 0; - position: absolute; - top: 0; - left: $horizontal_padding / 2; - right: $horizontal_padding / 2; - bottom: 0; - width: auto; - overflow-x: hidden; - overflow-y: auto; - } - - > .ui-resizable-handle { - position: absolute; - font-size: 0.1px; - display: block; - -ms-touch-action: none; - touch-action: none; - } - - &.ui-resizable-disabled > .ui-resizable-handle, - &.ui-resizable-autohide > .ui-resizable-handle { display: none; } - - &.ui-draggable-dragging, - &.ui-resizable-resizing { - z-index: 100; - - > .grid-stack-item-content, - > .grid-stack-item-content { - box-shadow: 1px 4px 6px rgba(0, 0, 0, 0.2); - opacity: 0.8; - } - } - - > .ui-resizable-se, - > .ui-resizable-sw { - background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDUxMS42MjYgNTExLjYyNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjYyNiA1MTEuNjI3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTMyOC45MDYsNDAxLjk5NGgtMzYuNTUzVjEwOS42MzZoMzYuNTUzYzQuOTQ4LDAsOS4yMzYtMS44MDksMTIuODQ3LTUuNDI2YzMuNjEzLTMuNjE1LDUuNDIxLTcuODk4LDUuNDIxLTEyLjg0NSAgIGMwLTQuOTQ5LTEuODAxLTkuMjMxLTUuNDI4LTEyLjg1MWwtNzMuMDg3LTczLjA5QzI2NS4wNDQsMS44MDksMjYwLjc2LDAsMjU1LjgxMywwYy00Ljk0OCwwLTkuMjI5LDEuODA5LTEyLjg0Nyw1LjQyNCAgIGwtNzMuMDg4LDczLjA5Yy0zLjYxOCwzLjYxOS01LjQyNCw3LjkwMi01LjQyNCwxMi44NTFjMCw0Ljk0NiwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDVjMy42MTksMy42MTcsNy45MDEsNS40MjYsMTIuODUsNS40MjYgICBoMzYuNTQ1djI5Mi4zNThoLTM2LjU0MmMtNC45NTIsMC05LjIzNSwxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MjEtNS40MjQsNy45MDUtNS40MjQsMTIuODU0ICAgYzAsNC45NDUsMS44MDcsOS4yMjcsNS40MjQsMTIuODQ3bDczLjA4OSw3My4wODhjMy42MTcsMy42MTcsNy44OTgsNS40MjQsMTIuODQ3LDUuNDI0YzQuOTUsMCw5LjIzNC0xLjgwNywxMi44NDktNS40MjQgICBsNzMuMDg3LTczLjA4OGMzLjYxMy0zLjYyLDUuNDIxLTcuOTAxLDUuNDIxLTEyLjg0N2MwLTQuOTQ4LTEuODA4LTkuMjMyLTUuNDIxLTEyLjg1NCAgIEMzMzguMTQyLDQwMy44MDIsMzMzLjg1Nyw0MDEuOTk0LDMyOC45MDYsNDAxLjk5NHoiIGZpbGw9IiM2NjY2NjYiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K); - background-repeat: no-repeat; - background-position: center; - @include vendor(transform, rotate(45deg)); - } - - > .ui-resizable-se { - @include vendor(transform, rotate(-45deg)); - } - - - > .ui-resizable-nw { cursor: nw-resize; width: 20px; height: 20px; left: 10px; top: 0; } - > .ui-resizable-n { cursor: n-resize; height: 10px; top: 0; left: 25px; right: 25px; } - > .ui-resizable-ne { cursor: ne-resize; width: 20px; height: 20px; right: 10px; top: 0; } - > .ui-resizable-e { cursor: e-resize; width: 10px; right: $horizontal_padding / 2; top: 15px; bottom: 15px; } - > .ui-resizable-se { cursor: se-resize; width: 20px; height: 20px; right: 10px; bottom: 0; } - > .ui-resizable-s { cursor: s-resize; height: 10px; left: 25px; bottom: 0; right: 25px; } - > .ui-resizable-sw { cursor: sw-resize; width: 20px; height: 20px; left: 10px; bottom: 0; } - > .ui-resizable-w { cursor: w-resize; width: 10px; left: $horizontal_padding / 2; top: 15px; bottom: 15px; } - - &.ui-draggable-dragging { - &> .ui-resizable-handle { - display: none !important; - } - } - - @for $i from 1 through $gridstack-columns { - &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } - &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } - &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } - &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } - } + &.ui-resizable-disabled > .ui-resizable-handle, + &.ui-resizable-autohide > .ui-resizable-handle { display: none; } + + &.ui-draggable-dragging, + &.ui-resizable-resizing { + z-index: 100; + + > .grid-stack-item-content, + > .grid-stack-item-content { + box-shadow: 1px 4px 6px rgba(0, 0, 0, 0.2); + opacity: 0.8; + } + } + + > .ui-resizable-se, + > .ui-resizable-sw { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjE2cHgiIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDUxMS42MjYgNTExLjYyNyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjYyNiA1MTEuNjI3OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnPgoJPHBhdGggZD0iTTMyOC45MDYsNDAxLjk5NGgtMzYuNTUzVjEwOS42MzZoMzYuNTUzYzQuOTQ4LDAsOS4yMzYtMS44MDksMTIuODQ3LTUuNDI2YzMuNjEzLTMuNjE1LDUuNDIxLTcuODk4LDUuNDIxLTEyLjg0NSAgIGMwLTQuOTQ5LTEuODAxLTkuMjMxLTUuNDI4LTEyLjg1MWwtNzMuMDg3LTczLjA5QzI2NS4wNDQsMS44MDksMjYwLjc2LDAsMjU1LjgxMywwYy00Ljk0OCwwLTkuMjI5LDEuODA5LTEyLjg0Nyw1LjQyNCAgIGwtNzMuMDg4LDczLjA5Yy0zLjYxOCwzLjYxOS01LjQyNCw3LjkwMi01LjQyNCwxMi44NTFjMCw0Ljk0NiwxLjgwNyw5LjIyOSw1LjQyNCwxMi44NDVjMy42MTksMy42MTcsNy45MDEsNS40MjYsMTIuODUsNS40MjYgICBoMzYuNTQ1djI5Mi4zNThoLTM2LjU0MmMtNC45NTIsMC05LjIzNSwxLjgwOC0xMi44NSw1LjQyMWMtMy42MTcsMy42MjEtNS40MjQsNy45MDUtNS40MjQsMTIuODU0ICAgYzAsNC45NDUsMS44MDcsOS4yMjcsNS40MjQsMTIuODQ3bDczLjA4OSw3My4wODhjMy42MTcsMy42MTcsNy44OTgsNS40MjQsMTIuODQ3LDUuNDI0YzQuOTUsMCw5LjIzNC0xLjgwNywxMi44NDktNS40MjQgICBsNzMuMDg3LTczLjA4OGMzLjYxMy0zLjYyLDUuNDIxLTcuOTAxLDUuNDIxLTEyLjg0N2MwLTQuOTQ4LTEuODA4LTkuMjMyLTUuNDIxLTEyLjg1NCAgIEMzMzguMTQyLDQwMy44MDIsMzMzLjg1Nyw0MDEuOTk0LDMyOC45MDYsNDAxLjk5NHoiIGZpbGw9IiM2NjY2NjYiLz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K); + background-repeat: no-repeat; + background-position: center; + @include vendor(transform, rotate(45deg)); + } + + > .ui-resizable-se { + @include vendor(transform, rotate(-45deg)); } - &.grid-stack-animate, - &.grid-stack-animate .grid-stack-item { - @include vendor(transition, left $animation_speed, top $animation_speed, height $animation_speed, width $animation_speed); + + > .ui-resizable-nw { cursor: nw-resize; width: 20px; height: 20px; left: 10px; top: 0; } + > .ui-resizable-n { cursor: n-resize; height: 10px; top: 0; left: 25px; right: 25px; } + > .ui-resizable-ne { cursor: ne-resize; width: 20px; height: 20px; right: 10px; top: 0; } + > .ui-resizable-e { cursor: e-resize; width: 10px; right: $horizontal_padding / 2; top: 15px; bottom: 15px; } + > .ui-resizable-se { cursor: se-resize; width: 20px; height: 20px; right: 10px; bottom: 0; } + > .ui-resizable-s { cursor: s-resize; height: 10px; left: 25px; bottom: 0; right: 25px; } + > .ui-resizable-sw { cursor: sw-resize; width: 20px; height: 20px; left: 10px; bottom: 0; } + > .ui-resizable-w { cursor: w-resize; width: 10px; left: $horizontal_padding / 2; top: 15px; bottom: 15px; } + + &.ui-draggable-dragging { + &> .ui-resizable-handle { + display: none !important; + } } - &.grid-stack-animate .grid-stack-item.ui-draggable-dragging, - &.grid-stack-animate .grid-stack-item.ui-resizable-resizing, - &.grid-stack-animate .grid-stack-item.grid-stack-placeholder{ - @include vendor(transition, left .0s, top .0s, height .0s, width .0s); + @for $i from 1 through $gridstack-columns { + &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } + &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } + &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } + &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } + } + } + + &.grid-stack-animate, + &.grid-stack-animate .grid-stack-item { + @include vendor(transition, left $animation_speed, top $animation_speed, height $animation_speed, width $animation_speed); + } + + &.grid-stack-animate .grid-stack-item.ui-draggable-dragging, + &.grid-stack-animate .grid-stack-item.ui-resizable-resizing, + &.grid-stack-animate .grid-stack-item.grid-stack-placeholder{ + @include vendor(transition, left .0s, top .0s, height .0s, width .0s); + } + + &.grid-stack-one-column-mode { + height: auto !important; + &> .grid-stack-item { + position: relative !important; + width: auto !important; + left: 0 !important; + top: auto !important; + margin-bottom: $vertical_padding; + max-width: none !important; + + &> .ui-resizable-handle { display: none; } } - - &.grid-stack-one-column-mode { - height: auto !important; - &> .grid-stack-item { - position: relative !important; - width: auto !important; - left: 0 !important; - top: auto !important; - margin-bottom: $vertical_padding; - max-width: none !important; - - &> .ui-resizable-handle { display: none; } - } - } + } } From 0651ace68adde451f20b75bc50be45b615d2c5b5 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 10 Nov 2019 10:36:16 -0800 Subject: [PATCH 0039/1298] lock package dependency for security warning locked the following 2 indirect dependencies to remove critical/sever security risk, as per github "lodash": "^4.17.13", "js-yaml": "^3.13.1" --- package.json | 4 ++++ yarn.lock | 32 ++++---------------------------- 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index cad5acc5e..0f13c9c8d 100644 --- a/package.json +++ b/package.json @@ -61,5 +61,9 @@ "karma-jasmine": "^2.0.1", "puppeteer": "^1.13.0", "serve-static": "^1.13.2" + }, + "resolutions": { + "lodash": "^4.17.13", + "js-yaml": "^3.13.1" } } diff --git a/yarn.lock b/yarn.lock index fba46adfd..8abc19d0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,7 +147,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.2, argparse@^1.0.7: +argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== @@ -1306,7 +1306,7 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: +esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= @@ -2276,11 +2276,6 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherit@^2.2.2: - version "2.2.7" - resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.7.tgz#4e238e289bc7adddf8ff5053d0f26a2fcda94b9f" - integrity sha512-dxJmC1j0Q32NFAjvbd6g3lXYLZ49HgzotgbSMwMkoiTXGhC9412Oc24g7A7M9cPPkw/vDsF2cSII+2zJwocUtQ== - inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" @@ -2691,7 +2686,7 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== -js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: +js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0, js-yaml@~3.4.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -2699,15 +2694,6 @@ js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.4.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" - integrity sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA= - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - inherit "^2.2.2" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -3011,21 +2997,11 @@ lodash.isfinite@^3.3.2: resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" integrity sha1-+4m2WpqAKBgz8LdHizpRBPiY67M= -lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= - -lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5: +lodash@^3.5.0, lodash@^3.7.0, lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~3.10.0, lodash@~4.17.10, lodash@~4.17.11, lodash@~4.17.5, lodash@~4.6.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@~4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.6.1.tgz#df00c1164ad236b183cfc3887a5e8d38cc63cbbc" - integrity sha1-3wDBFkrSNrGDz8OIel6NOMxjy7w= - log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" From f2147146f7b1299dd818807fc3ba3a39c7c7d7cf Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 11 Nov 2019 15:40:50 -0800 Subject: [PATCH 0040/1298] onStartMoving() fix to minHeight *method was not correctly counting margin when figuring out minHeight during a drag (see #999) * fixed cellHeight() getter to correctly returns the value and checked all places that use to adjust for margins --- demo/two.html | 4 ++-- src/gridstack.js | 35 +++++++++++++++++++++++++---------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/demo/two.html b/demo/two.html index c31252650..8bf06d2f9 100644 --- a/demo/two.html +++ b/demo/two.html @@ -18,8 +18,8 @@ - - + + + + +
+

RTL Demo

+ +
+ +
+ +
+ +
+
+ + + + diff --git a/demo/rtl.html b/demo/rtl.html deleted file mode 100644 index ca07c92bf..000000000 --- a/demo/rtl.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - RTL demo - - - - - - - - - - - - - - - -
-

RTL Demo

- -
- -
- -
- -
-
- - - - - diff --git a/demo/serialization.html b/demo/serialization.html index 7f9be56ac..c93760756 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -1,106 +1,105 @@ - + - - - - Serialization demo + + + + Serialization demo - - + + - - - - - - + + + + + + - + .grid-stack-item-content { + color: #2c3e50; + text-align: center; + background-color: #18bc9c; + } + -
-

Serialization demo

- - - -

-
-
- -
+
+

Serialization demo

+ Save Grid + Load Grid + Clear Grid +

+
+
+ +
+ + this.loadGrid(); + }; + }); + diff --git a/demo/two.html b/demo/two.html index 8ad75d099..953ee0dd7 100644 --- a/demo/two.html +++ b/demo/two.html @@ -1,145 +1,145 @@ - - - - - - Two grids demo - - - - - - - - - - - - - + + + + + + Two grids demo + + + + + + + + + + + + + -
-

Two grids demo

- -
-
- -
-
-
-
-
-
+
+

Two grids demo

-
-
-
-
-
-
-
-
-
+
+
+ +
+
+
+
- - + }); + + $('.sidebar .grid-stack-item').draggable({ + revert: 'invalid', + handle: '.grid-stack-item-content', + scroll: false, + appendTo: 'body' + }); + }); + From 1e747cca879eac84e7c7da9ed9a875245bd88897 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 Nov 2019 21:44:53 -0800 Subject: [PATCH 0056/1298] widget properties when dropping it into other grid fix for #924 * updated two.html to have some min/max/id contrain to copy over TODO: all data-gs- props are there, but the resize/move feedback isn't in sync. I suspec onEndMoving() not having o.data('_gridstack_node') as the culprit. --- demo/two.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/demo/two.html b/demo/two.html index 953ee0dd7..a22c0ad33 100644 --- a/demo/two.html +++ b/demo/two.html @@ -121,7 +121,7 @@

Two grids demo

{x: 0, y: 0, width: 2, height: 2}, {x: 3, y: 1, width: 1, height: 2}, {x: 4, y: 1, width: 1, height: 1}, - {x: 2, y: 3, width: 3, height: 1}, + {x: 2, y: 3, width: 3, height: 1, minWidth: 2, id: 'special', text: 'has minWidth=2'}, {x: 2, y: 5, width: 1, height: 1} ]; @@ -129,7 +129,8 @@

Two grids demo

var grid = $(this).data('gridstack'); items.forEach(function (node) { - grid.addWidget($('
'), node); + grid.addWidget($('
' + + (node.text? node.text : '') + '
'), node); }); }); From 6fcb05aedc89b4c9dd5e7e5f3555c039c55c33c4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 Nov 2019 22:26:04 -0800 Subject: [PATCH 0057/1298] knockout demo Deleting widget issue fix for #1015 TODO: udated demo to make it easier to debug/fix. I don't see the arraw changing order going 1 column. not sure of issue yet.. --- demo/knockout.html | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/demo/knockout.html b/demo/knockout.html index d1add0d6a..c0f0077f9 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -10,14 +10,14 @@ Knockout.js demo - + - + - - - + + + @@ -77,8 +77,8 @@

knockout.js Demo

template: [ '
', - '
', - '
', + '
', + '
', '
', '
' ].join('') @@ -108,10 +108,10 @@

knockout.js Demo

}; var widgets = [ - {x: 0, y: 0, width: 2, height: 2}, - {x: 2, y: 0, width: 4, height: 2}, - {x: 6, y: 0, width: 2, height: 4}, - {x: 1, y: 2, width: 4, height: 2} + {x: 0, y: 0, width: 2, height: 2, id: '0'}, + {x: 2, y: 0, width: 4, height: 2, id: '1'}, + {x: 6, y: 0, width: 2, height: 4, id: '2'}, + {x: 1, y: 2, width: 4, height: 2, id: '3'} ]; var controller = new Controller(widgets); From 673a92f13a9a19bdc4599af34ce860545c6e4659 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 18 Nov 2019 10:27:34 -0800 Subject: [PATCH 0058/1298] many columns test case, some fixes Created a sample for #810 with 30 columns, but not seeing issues in that PR. In the meantime I found those issues: * fix README talking about custom columns # * fix SASS code to handle >12 columns as you need to override stack-item min-width (we have 8.3333% otherwise = 1/12) * while testing incorrectly passed 'auto' for gridItem width (prop on grid cellHeight) so fixed code to handle wrong strings passed for x,y,w,h * updated test cases --- README.md | 10 +- doc/README.md | 8 +- spec/e2e/html/810-many-columns.css | 381 ++++++++++++++++++++++++++++ spec/e2e/html/810-many-columns.html | 75 ++++++ spec/gridstack-spec.js | 20 ++ src/gridstack.js | 23 +- 6 files changed, 503 insertions(+), 14 deletions(-) create mode 100644 spec/e2e/html/810-many-columns.css create mode 100644 spec/e2e/html/810-many-columns.html diff --git a/README.md b/README.md index 0dd4fd1cd..4e5b67090 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ If you're still experiencing issues on touch devices please check [#444](https:/ ## Change grid width -To change grid width (columns count), to addition to `width` option, CSS rules +To change grid width (columns count), in addition to setting the `width` grid option CSS rules for `.grid-stack-item[data-gs-width="X"]` and `.grid-stack-item[data-gs-x="X"]` have to be changed accordingly. For instance for 3-column grid you need to rewrite CSS to be: @@ -205,13 +205,15 @@ For 4-column grid it should be: and so on. -Here is a SASS code snippet which can make life easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)): +Here is a SASS code snippet which can make life easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)) and use a site like [sassmeister.com](https://www.sassmeister.com/) to generate CSS if you need to: ```sass .grid-stack > .grid-stack-item { $gridstack-columns: 12; + min-width: (100% / $gridstack-columns); + @for $i from 1 through $gridstack-columns { &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } @@ -221,11 +223,11 @@ Here is a SASS code snippet which can make life easier (Thanks to @ascendantofra } ``` -Or you can include `gridstack-extra.css`. See below for more details. +Or you can include `gridstack-extra.css` which include [1-12] column sizes. See below for more details. ## Extra CSS -There are few extra CSS batteries in `gridstack-extra.css` (`gridstack-extra.min.css`). +There are few extra CSS batteries in `gridstack-extra.css` (`gridstack-extra.min.css`) that defines CSS for grids with [1-12] columns. Anything more and you'll need to generate the above SASS/CSS yourself. ### Different grid widths diff --git a/doc/README.md b/doc/README.md index 05067ddb4..99eb72393 100644 --- a/doc/README.md +++ b/doc/README.md @@ -104,10 +104,10 @@ gridstack.js API ## Item attributes -- `data-gs-x`, `data-gs-y` - element position. Note: if one is missing this will `autoPosition` the item -- `data-gs-width`, `data-gs-height` - element size -- `data-gs-id`- good for quick identification (for example in change event) -- `data-gs-max-width`, `data-gs-min-width`, `data-gs-max-height`, `data-gs-min-height` - element constraints +- `data-gs-x`, `data-gs-y` - (number) element position in row/column. Note: if one is missing this will `autoPosition` the item +- `data-gs-width`, `data-gs-height` - (number) element size in row/column +- `data-gs-id`- (number | string) good for quick identification (for example in change event) +- `data-gs-max-width`, `data-gs-min-width`, `data-gs-max-height`, `data-gs-min-height` - element constraints in row/column - `data-gs-no-resize` - disable element resizing - `data-gs-no-move` - disable element moving - `data-gs-auto-position` - tells to ignore `data-gs-x` and `data-gs-y` attributes and to place element to the first available position. Having either one missing will also do that. diff --git a/spec/e2e/html/810-many-columns.css b/spec/e2e/html/810-many-columns.css new file mode 100644 index 000000000..03c4f18d5 --- /dev/null +++ b/spec/e2e/html/810-many-columns.css @@ -0,0 +1,381 @@ +/* SASS code using https://www.sassmeister.com/ +.grid-stack > .grid-stack-item { + + $gridstack-columns: 30; + + min-width: (100% / $gridstack-columns); + + @for $i from 1 through $gridstack-columns { + &[data-gs-width='#{$i}'] { width: (100% / $gridstack-columns) * $i; } + &[data-gs-x='#{$i}'] { left: (100% / $gridstack-columns) * $i; } + &[data-gs-min-width='#{$i}'] { min-width: (100% / $gridstack-columns) * $i; } + &[data-gs-max-width='#{$i}'] { max-width: (100% / $gridstack-columns) * $i; } + } + } + */ + + /* override gridstack,css */ + .grid-stack > .grid-stack-item { + min-width: 3.3333333333%; + } + + .grid-stack > .grid-stack-item[data-gs-width="1"] { + width: 3.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="1"] { + left: 3.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="1"] { + min-width: 3.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="1"] { + max-width: 3.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="2"] { + width: 6.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="2"] { + left: 6.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="2"] { + min-width: 6.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="2"] { + max-width: 6.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="3"] { + width: 10%; + } + .grid-stack > .grid-stack-item[data-gs-x="3"] { + left: 10%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="3"] { + min-width: 10%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="3"] { + max-width: 10%; + } + .grid-stack > .grid-stack-item[data-gs-width="4"] { + width: 13.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="4"] { + left: 13.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="4"] { + min-width: 13.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="4"] { + max-width: 13.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="5"] { + width: 16.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="5"] { + left: 16.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="5"] { + min-width: 16.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="5"] { + max-width: 16.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="6"] { + width: 20%; + } + .grid-stack > .grid-stack-item[data-gs-x="6"] { + left: 20%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="6"] { + min-width: 20%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="6"] { + max-width: 20%; + } + .grid-stack > .grid-stack-item[data-gs-width="7"] { + width: 23.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="7"] { + left: 23.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="7"] { + min-width: 23.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="7"] { + max-width: 23.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="8"] { + width: 26.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="8"] { + left: 26.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="8"] { + min-width: 26.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="8"] { + max-width: 26.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="9"] { + width: 30%; + } + .grid-stack > .grid-stack-item[data-gs-x="9"] { + left: 30%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="9"] { + min-width: 30%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="9"] { + max-width: 30%; + } + .grid-stack > .grid-stack-item[data-gs-width="10"] { + width: 33.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="10"] { + left: 33.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="10"] { + min-width: 33.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="10"] { + max-width: 33.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="11"] { + width: 36.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="11"] { + left: 36.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="11"] { + min-width: 36.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="11"] { + max-width: 36.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="12"] { + width: 40%; + } + .grid-stack > .grid-stack-item[data-gs-x="12"] { + left: 40%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="12"] { + min-width: 40%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="12"] { + max-width: 40%; + } + .grid-stack > .grid-stack-item[data-gs-width="13"] { + width: 43.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="13"] { + left: 43.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="13"] { + min-width: 43.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="13"] { + max-width: 43.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="14"] { + width: 46.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="14"] { + left: 46.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="14"] { + min-width: 46.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="14"] { + max-width: 46.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="15"] { + width: 50%; + } + .grid-stack > .grid-stack-item[data-gs-x="15"] { + left: 50%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="15"] { + min-width: 50%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="15"] { + max-width: 50%; + } + .grid-stack > .grid-stack-item[data-gs-width="16"] { + width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="16"] { + left: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="16"] { + min-width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="16"] { + max-width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="17"] { + width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="17"] { + left: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="17"] { + min-width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="17"] { + max-width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="18"] { + width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-x="18"] { + left: 60%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="18"] { + min-width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="18"] { + max-width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-width="19"] { + width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="19"] { + left: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="19"] { + min-width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="19"] { + max-width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="20"] { + width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="20"] { + left: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="20"] { + min-width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="20"] { + max-width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="21"] { + width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-x="21"] { + left: 70%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="21"] { + min-width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="21"] { + max-width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-width="22"] { + width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="22"] { + left: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="22"] { + min-width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="22"] { + max-width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="23"] { + width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="23"] { + left: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="23"] { + min-width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="23"] { + max-width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="24"] { + width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-x="24"] { + left: 80%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="24"] { + min-width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="24"] { + max-width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-width="25"] { + width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="25"] { + left: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="25"] { + min-width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="25"] { + max-width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="26"] { + width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="26"] { + left: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="26"] { + min-width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="26"] { + max-width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="27"] { + width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-x="27"] { + left: 90%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="27"] { + min-width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="27"] { + max-width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-width="28"] { + width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="28"] { + left: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="28"] { + min-width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="28"] { + max-width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="29"] { + width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="29"] { + left: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="29"] { + min-width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="29"] { + max-width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="30"] { + width: 100%; + } + .grid-stack > .grid-stack-item[data-gs-x="30"] { + left: 100%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="30"] { + min-width: 100%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="30"] { + max-width: 100%; + } \ No newline at end of file diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html new file mode 100644 index 000000000..a9d3efa9b --- /dev/null +++ b/spec/e2e/html/810-many-columns.html @@ -0,0 +1,75 @@ + + + + + + + + + Many columns demo + + + + + + + + + + + + + + + +
+

Many Columns demo

+ +

+
+
+ + + + + diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index 28249a1ee..7874909f1 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -913,6 +913,26 @@ describe('gridstack', function() { }); }); + describe('addWidget() with bad string value widget options', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should use default', function() { + $('.grid-stack').gridstack(); + var grid = $('.grid-stack').data('gridstack'); + var widgetHTML = '
'; + var widget = grid.addWidget(widgetHTML, {x: 'foo', height: null, width: 'bar', height: ''}); + var $widget = $(widget); + expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); + expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); + expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); + expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(1); + }); + }); + describe('addWidget with null options, ', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); diff --git a/src/gridstack.js b/src/gridstack.js index e8907b6f8..bcdfbe66e 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -393,19 +393,29 @@ GridStackEngine.prototype._prepareNode = function(node, resizing) { node = node || {}; // if we're missing position, have the grid position us automatically (before we set them to 0,0) - if (node.x === undefined || node.y === undefined) { + if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) { node.autoPosition = true; } - node = Utils.defaults(node, {width: 1, height: 1, x: 0, y: 0}); - node.x = parseInt('' + node.x); - node.y = parseInt('' + node.y); - node.width = parseInt('' + node.width); - node.height = parseInt('' + node.height); + // assign defaults for missing required fields + var defaults = {width: 1, height: 1, x: 0, y: 0}; + node = Utils.defaults(node, defaults); + + // convert any strings over + node.x = parseInt(node.x); + node.y = parseInt(node.y); + node.width = parseInt(node.width); + node.height = parseInt(node.height); node.autoPosition = node.autoPosition || false; node.noResize = node.noResize || false; node.noMove = node.noMove || false; + // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #) + if (Number.isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; } + if (Number.isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; } + if (Number.isNaN(node.width)) { node.width = defaults.width; } + if (Number.isNaN(node.height)) { node.height = defaults.height; } + if (node.width > this.width) { node.width = this.width; } else if (node.width < 1) { @@ -1747,6 +1757,7 @@ }; GridStack.prototype.cellWidth = function() { + // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) return Math.round(this.container.outerWidth() / this.opts.width); }; From cb769582eb845a8b8ed5ed0412f54cdf5c4cf3e8 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 18 Nov 2019 10:34:17 -0800 Subject: [PATCH 0059/1298] changes update --- doc/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index e69f97196..b88858948 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -28,6 +28,7 @@ Change log - fix moving widgets when having multiple grids. jquery-ui workaround ([#1043](https://github.com/gridstack/gridstack.js/issues/1043)). - switch to eslint ([#763](https://github.com/gridstack/gridstack.js/issues/763)). - null values to addWidget() exception fix ([#1042](https://github.com/gridstack/gridstack.js/issues/1042)). +- various fixes for custom # of columns (readme, safer code) ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). ## v0.5.2 (2019-11-13) From 2299d03e2f3bad716565f9009d6282243497e328 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 18 Nov 2019 12:59:21 -0800 Subject: [PATCH 0060/1298] options rename to `columns` & `maxRows` * grid options `width` is now `columns`, and `height` is now `maxRows` which match what they are. * Old names are still supported for now (with console warnings) * updated test (required), samples (optional), readme * re-wrote entire custom column section. Hopefully much easier to find/use now. --- README.md | 53 +++++++++++----------- demo/two.html | 2 +- doc/CHANGES.md | 2 +- doc/README.md | 8 ++-- spec/e2e/html/810-many-columns.html | 2 +- spec/gridstack-engine-spec.js | 4 +- spec/gridstack-spec.js | 36 +++++++-------- src/gridstack.d.ts | 12 ++--- src/gridstack.js | 70 ++++++++++++++++------------- 9 files changed, 97 insertions(+), 92 deletions(-) diff --git a/README.md b/README.md index 4e5b67090..6f4800091 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,8 @@ Join gridstack.js on Slack: https://gridstackjs.troolee.com - [API Documentation](#api-documentation) - [Touch devices support](#touch-devices-support) - [gridstack.js for specific frameworks](#gridstackjs-for-specific-frameworks) - - [Change grid width](#change-grid-width) - - [Extra CSS](#extra-css) - - [Different grid widths](#different-grid-widths) + - [Change grid columns](#change-grid-columns) + - [Custom columns CSS](#custom-columns-css) - [Override resizable/draggable options](#override-resizabledraggable-options) - [IE8 support](#ie8-support) - [Changes](#changes) @@ -174,10 +173,31 @@ If you're still experiencing issues on touch devices please check [#444](https:/ - ember: [gridstack-ember](https://github.com/yahoo/ember-gridstack) -## Change grid width +## Change grid columns -To change grid width (columns count), in addition to setting the `width` grid option CSS rules -for `.grid-stack-item[data-gs-width="X"]` and `.grid-stack-item[data-gs-x="X"]` have to be changed accordingly. +GridStack makes it very easy if you need [1-12] columns out of the box (default is 12), but you always need **2 things** if you need to customize this: + +1) Change the `columns` grid option when creating a grid to your number N +```js +$('.grid-stack').gridstack( {columns: N} ); +``` + +2) and change your HTML accordingly if **N < 12** (else custom CSS section next). Without this, things will not render/work correctly. +```html + + +
...
+``` + +Note `grid-stack-N` class was added. + +`gridstack-extra.css` (and `gridstack-extra.min.css`) defines CSS for grids with custom [1-12] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). + +See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns + +## Custom columns CSS + +If you need > 12 columns or want to generate the CSS manually (else see above) you will need to generate CSS rules for `.grid-stack-item[data-gs-width="X"]` and `.grid-stack-item[data-gs-x="X"]`. For instance for 3-column grid you need to rewrite CSS to be: @@ -205,7 +225,7 @@ For 4-column grid it should be: and so on. -Here is a SASS code snippet which can make life easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)) and use a site like [sassmeister.com](https://www.sassmeister.com/) to generate CSS if you need to: +Better yet, here is a SASS code snippet which can make life much easier (Thanks to @ascendantofrain, [#81](https://github.com/gridstack/gridstack.js/issues/81) and @StefanM98, [#868](https://github.com/gridstack/gridstack.js/issues/868)) and you can use sites like [sassmeister.com](https://www.sassmeister.com/) to generate the CSS for you instead: ```sass .grid-stack > .grid-stack-item { @@ -223,25 +243,6 @@ Here is a SASS code snippet which can make life easier (Thanks to @ascendantofra } ``` -Or you can include `gridstack-extra.css` which include [1-12] column sizes. See below for more details. - -## Extra CSS - -There are few extra CSS batteries in `gridstack-extra.css` (`gridstack-extra.min.css`) that defines CSS for grids with [1-12] columns. Anything more and you'll need to generate the above SASS/CSS yourself. - -### Different grid widths - -You can use other than 12 grid width: - -```html -
...
-``` -```javascript -$('.grid-stack').gridstack({width: N}); -``` - -See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) - ## Override resizable/draggable options You can override default `resizable`/`draggable` options. For instance to enable other then bottom right resizing handle diff --git a/demo/two.html b/demo/two.html index 953ee0dd7..3509a0376 100644 --- a/demo/two.html +++ b/demo/two.html @@ -106,7 +106,7 @@

Two grids demo

+ + + + + + + + +
+

setColumn() grid demo

+
+ 1 Column +
+

+
+
+ + + + + diff --git a/demo/responsive.html b/demo/responsive.html index 9d8e76041..64758ba9c 100644 --- a/demo/responsive.html +++ b/demo/responsive.html @@ -72,13 +72,13 @@

Responsive grid demo

if (isBreakpoint('xs')) { $('#grid-size').text('One column mode'); } else if (isBreakpoint('sm')) { - grid.setGridWidth(3); + grid.setColumn(3); $('#grid-size').text(3); } else if (isBreakpoint('md')) { - grid.setGridWidth(6); + grid.setColumn(6); $('#grid-size').text(6); } else if (isBreakpoint('lg')) { - grid.setGridWidth(12); + grid.setColumn(12); $('#grid-size').text(12); } }; diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 241555bcb..9b0f2bdb8 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -24,7 +24,7 @@ Change log ## v0.5.2-dev (upcoming changes) -- grid options `width` is now `column`, and `height` is now `maxRow` which match what they are. Old names are still supported for now (with console warnings). Also various fixes for custom # of column and re-wrote entire doc section ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). +- grid options `width` is now `column`, and `height` is now `maxRow`, and method `setGridWidth()` is now `setColumn()` which match what they are. Old names are still supported for now (with console warnings). Also various fixes for custom # of column and re-wrote entire doc section ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). - fix widgets not animating when animate: true is used. on every move, styles were recreated-fix should slightly improve gridstack.js speed ([#937](https://github.com/gridstack/gridstack.js/issues/937)). - fix moving widgets when having multiple grids. jquery-ui workaround ([#1043](https://github.com/gridstack/gridstack.js/issues/1043)). - switch to eslint ([#763](https://github.com/gridstack/gridstack.js/issues/763)). diff --git a/doc/README.md b/doc/README.md index a8162dffc..597cc5d4f 100644 --- a/doc/README.md +++ b/doc/README.md @@ -47,7 +47,7 @@ gridstack.js API - [resize(el, width, height)](#resizeel-width-height) - [resizable(el, val)](#resizableel-val) - [setAnimation(doAnimate)](#setanimationdoanimate) - - [setGridWidth(gridWidth, doNotPropagate)](#setgridwidthgridwidth-donotpropagate) + - [setColumn(column, doNotPropagate)](#setcolumncolumn-donotpropagate) - [setStatic(staticValue)](#setstaticstaticvalue) - [update(el, x, y, width, height)](#updateel-x-y-width-height) - [verticalMargin()](#verticalmargin) @@ -436,11 +436,11 @@ Toggle the grid animation state. Toggles the `grid-stack-animate` class. - `doAnimate` - if `true` the grid will animate. -### setGridWidth(gridWidth, doNotPropagate) +### setColumn(column, doNotPropagate) (Experimental) Modify number of columns in the grid. Will attempt to update existing widgets to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css`. -- `gridWidth` - Integer between 1 and 12. +- `column` - Integer between 1 and 12. - `doNotPropagate` - if true existing widgets will not be updated. ### setStatic(staticValue) diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index aa61b5df3..115c87f77 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -3,7 +3,7 @@ describe('gridstack', function() { var e; var w; - // grid has 4x2 and 4x4 top-left aligned - used all most test cases + // grid has 4x2 and 4x4 top-left aligned - used on most test cases var gridstackHTML = '
' + '
' + @@ -271,6 +271,62 @@ describe('gridstack', function() { }); }); + describe('grid.column', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should have no changes', function() { + var options = { + column: 12 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + expect(grid.opts.column).toBe(12); + grid.setColumn(12); + expect(grid.opts.column).toBe(12); + grid.setGridWidth(12); // old API + expect(grid.opts.column).toBe(12); + }); + it('should change column number, no relayout', function() { + var options = { + column: 12 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + + grid.setColumn(10, false); + expect(grid.opts.column).toBe(10); + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); + } + + grid.setColumn(9, true); + expect(grid.opts.column).toBe(9); + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); + } + }); + it('should change column number and relayout items', function() { + var options = { + column: 12 + }; + $('.grid-stack').gridstack(options); + var grid = $('.grid-stack').data('gridstack'); + var items = $('.grid-stack-item'); + + grid.setColumn(1); + expect(grid.opts.column).toBe(1); + for (var j = 0; j < items.length; j++) { + expect(parseInt($(items[j]).attr('data-gs-x'), 10)).toBe(0); + // TODO: check Y position but I don't currently agree with order. [Alain] + } + }); + }); + describe('grid.minWidth', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 68fa25bde..957b59224 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -264,10 +264,10 @@ interface GridStack { /** * (Experimental) Modify number of columns in the grid. Will attempt to update existing widgets * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css`. - * @param gridWidth - Integer between 1 and 12. + * @param column - Integer between 1 and 12. * @param doNotPropagate if true existing widgets will not be updated. */ - setGridWidth(gridWidth: number, doNotPropagate: boolean): void; + setColumn(column: number, doNotPropagate: boolean): void; /** * Toggle the grid static state. Also toggle the grid-stack-static class. diff --git a/src/gridstack.js b/src/gridstack.js index b8f4e213d..59f804eb9 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -250,11 +250,8 @@ /*eslint-disable camelcase */ Utils.is_intercepted = obsolete(Utils.isIntercepted, 'is_intercepted', 'isIntercepted'); - Utils.create_stylesheet = obsolete(Utils.createStylesheet, 'create_stylesheet', 'createStylesheet'); - Utils.remove_stylesheet = obsolete(Utils.removeStylesheet, 'remove_stylesheet', 'removeStylesheet'); - Utils.insert_css_rule = obsolete(Utils.insertCSSRule, 'insert_css_rule', 'insertCSSRule'); /*eslint-enable camelcase */ @@ -697,7 +694,7 @@ opts.itemClass = opts.itemClass || 'grid-stack-item'; var isNested = this.container.closest('.' + opts.itemClass).length > 0; - this.opts = Utils.defaults(opts || {}, { + this.opts = Utils.defaults(opts, { column: parseInt(this.container.attr('data-gs-column')) || 12, maxRow: parseInt(this.container.attr('data-gs-max-row')) || 0, itemClass: 'grid-stack-item', @@ -1229,7 +1226,7 @@ var distance = ui.position.top - node._prevYPix; node._prevYPix = ui.position.top; Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.grid.width || y < 0 || + if (el.data('inTrashZone') || x < 0 || x >= self.grid.column || y < 0 || (!self.grid.float && y > self.grid.getGridHeight())) { if (!node._temporaryRemoved) { if (self.opts.removable === true) { @@ -1807,15 +1804,21 @@ this.grid.commit(); }; - GridStack.prototype.setGridWidth = function(gridWidth,doNotPropagate) { + GridStack.prototype.setColumn = function(column, doNotPropagate) { + if (this.opts.column === column) { return; } this.container.removeClass('grid-stack-' + this.opts.column); if (doNotPropagate !== true) { - this._updateNodeWidths(this.opts.column, gridWidth); + this._updateNodeWidths(this.opts.column, column); } - this.opts.column = gridWidth; - this.grid.width = gridWidth; - this.container.addClass('grid-stack-' + gridWidth); + this.opts.column = this.grid.column = column; + this.container.addClass('grid-stack-' + column); }; + // legacy call from <= 0.5.2 - use new method instead. + GridStack.prototype.setGridWidth = function(column, doNotPropagate) { + console.warn('gridstack.js: setGridWidth() is deprecated as of v0.5.3 and has been replaced ' + + 'with setColumn(). It will be **completely** removed in v1.0.'); + this.setColumn(column, doNotPropagate); + } /*eslint-disable camelcase */ GridStackEngine.prototype.batch_update = obsolete(GridStackEngine.prototype.batchUpdate); From 1ea827f704bdc93ad6cc331b5b11a6f4d08105d6 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 19 Nov 2019 13:41:37 -0800 Subject: [PATCH 0067/1298] changes.md tweaks --- doc/CHANGES.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 9b0f2bdb8..5d1a85262 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -24,19 +24,19 @@ Change log ## v0.5.2-dev (upcoming changes) -- grid options `width` is now `column`, and `height` is now `maxRow`, and method `setGridWidth()` is now `setColumn()` which match what they are. Old names are still supported for now (with console warnings). Also various fixes for custom # of column and re-wrote entire doc section ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). +- grid options `width` is now `column`, `height` now `maxRow`, and `setGridWidth()` now `setColumn()` to match what they are. Old names are still supported (console warnings). Various fixes for custom # of column and re-wrote entire doc section ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). - fix widgets not animating when animate: true is used. on every move, styles were recreated-fix should slightly improve gridstack.js speed ([#937](https://github.com/gridstack/gridstack.js/issues/937)). - fix moving widgets when having multiple grids. jquery-ui workaround ([#1043](https://github.com/gridstack/gridstack.js/issues/1043)). - switch to eslint ([#763](https://github.com/gridstack/gridstack.js/issues/763)). -- null values to addWidget() exception fix ([#1042](https://github.com/gridstack/gridstack.js/issues/1042)). +- fix null values `addWidget()` options ([#1042](https://github.com/gridstack/gridstack.js/issues/1042)). ## v0.5.2 (2019-11-13) -- undefined x,y position messes up grid ([#1017](https://github.com/gridstack/gridstack.js/issues/1017)). +- undefined `x,y` position messes up grid ([#1017](https://github.com/gridstack/gridstack.js/issues/1017)). - changed code to 2 spaces. - fix minHeight during `onStartMoving()` ([#999](https://github.com/gridstack/gridstack.js/issues/999)). - TypeScript definition file now included - no need to include @types/gridstack, easier to update ([#1036](https://github.com/gridstack/gridstack.js/pull/1036)). -- new addWidget(el, options) to pass object so you don't have to spell 10 params. ([#907](https://github.com/gridstack/gridstack.js/issues/907)). +- new `addWidget(el, options)` to pass object so you don't have to spell 10 params. ([#907](https://github.com/gridstack/gridstack.js/issues/907)). ## v0.5.1 (2019-11-07) @@ -57,11 +57,11 @@ Change log ## v0.4.0 (2018-05-11) - widgets can have their own resize handles. Use `data-gs-resize-handles` element attribute to use. For example, `data-gs-resize-handles="e,w"` will make the particular widget only resize west and east. ([#494](https://github.com/gridstack/gridstack.js/issues/494)). -- enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/gridstack/gridstack.js/issues/661), ([#396](https://github.com/gridstack/gridstack.js/issues/396), ([#499](https://github.com/gridstack/gridstack.js/issues/499)). +- enable sidebar items to be duplicated properly. Pass `helper: 'clone'` in `draggable` options. ([#661](https://github.com/gridstack/gridstack.js/issues/661), [#396](https://github.com/gridstack/gridstack.js/issues/396), [#499](https://github.com/gridstack/gridstack.js/issues/499)). - fix `staticGrid` grid option ([#743](https://github.com/gridstack/gridstack.js/issues/743)) - preserve inline styles when moving/cloning items (thanks [@silverwind](https://github.com/silverwind)) - fix bug causing heights not to get set ([#744](https://github.com/gridstack/gridstack.js/issues/744)) -- allow grid to have min-height, fixes ([#628](https://github.com/gridstack/gridstack.js/issues/628)) (thanks [@adumesny](https://github.com/adumesny)) +- allow grid to have min-height, fixes ([#628](https://github.com/gridstack/gridstack.js/issues/628)) thanks [@adumesny](https://github.com/adumesny) - widget x and y are now ints (thanks [@DonnchaC](https://github.com/donnchac)) - allow all droppable options (thanks [@vigor-vlad](https://github.com/vigor-vlad)) - properly track mouse position in `getCellFromPixel` (thanks [@aletorrado](https://github.com/aletorrado)) @@ -74,7 +74,7 @@ Change log - prevent extra checks for removing widget when dragging off grid. - trigger `added` when a widget is added via dropping from one grid to another. - trigger `removed` when a widget is removed via dropping from one grid to another. -- trigger `removed` when a widget is removed via dropping on a removable zone ([#607](https://github.com/gridstack/gridstack.js/issues/607) and [#550])(https://github.com/gridstack/gridstack.js/issues/550)). +- trigger `removed` when a widget is removed via dropping on a removable zone ([#607](https://github.com/gridstack/gridstack.js/issues/607) and [#550](https://github.com/gridstack/gridstack.js/issues/550)). - trigger custom event for `resizestop` called `gsresizestop` ([#577](https://github.com/gridstack/gridstack.js/issues/577) and [#398](https://github.com/gridstack/gridstack.js/issues/398)). - prevent dragging/resizing in `oneColumnMode` ([#593](https://github.com/gridstack/gridstack.js/issues/593)). - add `oneColumnModeClass` option to grid. @@ -99,7 +99,7 @@ Change log - `cellHeight` and `verticalMargin` can now be string (e.g. '3em', '20px') (Thanks to @jlowcs). - add `maxWidth`/`maxHeight` methods. - add `enableMove`/`enableResize` methods. -- fix window resize issue #331. +- fix window resize issue [#331](https://github.com/gridstack/gridstack.js/issues/331)). - add options `disableDrag` and `disableResize`. - fix `batchUpdate`/`commit` (Thank to @radiolips) - remove dependency of FontAwesome @@ -147,16 +147,16 @@ Change log - fix grid initialization - add `cell_height`/`cell_width` API methods -- fix boolean attributes (issue #31) +- fix boolean attributes ([#31](https://github.com/gridstack/gridstack.js/issues/31)) ## v0.2.1 (2014-12-09) -- add widgets locking (issue #19) +- add widgets locking ([#19](https://github.com/gridstack/gridstack.js/issues/19)) - add `will_it_fit` API method -- fix auto-positioning (issue #20) +- fix auto-positioning ([#20](https://github.com/gridstack/gridstack.js/issues/20)) - add animation (thanks to @ishields) -- fix `y` coordinate calculation when dragging (issue #18) -- fix `remove_widget` (issue #16) +- fix `y` coordinate calculation when dragging ([#18](https://github.com/gridstack/gridstack.js/issues/18)) +- fix `remove_widget` ([#16](https://github.com/gridstack/gridstack.js/issues/16)) - minor fixes From 95f5a3a6e61d1913ef1a764ffd39f2bc8c896c44 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 20 Nov 2019 08:36:34 -0800 Subject: [PATCH 0068/1298] 0.5.3 release --- bower.json | 2 +- doc/CHANGES.md | 4 ++-- package.json | 2 +- {demo => spec/e2e/html}/column.html | 30 ++++++++++++++--------------- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 6 files changed, 21 insertions(+), 21 deletions(-) rename {demo => spec/e2e/html}/column.html (62%) diff --git a/bower.json b/bower.json index b3b2831a6..9238cb1bf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.2-dev", + "version": "0.5.3", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 5d1a85262..ba281b2cf 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v0.5.2-dev (upcoming changes)](#v052-dev-upcoming-changes) +- [v0.5.3 (2019-11-20)](#v053-2019-11-20) - [v0.5.2 (2019-11-13)](#v052-2019-11-13) - [v0.5.1 (2019-11-07)](#v051-2019-11-07) - [v0.5.0 (2019-11-06)](#v050-2019-11-06) @@ -22,7 +22,7 @@ Change log -## v0.5.2-dev (upcoming changes) +## v0.5.3 (2019-11-20) - grid options `width` is now `column`, `height` now `maxRow`, and `setGridWidth()` now `setColumn()` to match what they are. Old names are still supported (console warnings). Various fixes for custom # of column and re-wrote entire doc section ([#1053](https://github.com/gridstack/gridstack.js/issues/1053)). - fix widgets not animating when animate: true is used. on every move, styles were recreated-fix should slightly improve gridstack.js speed ([#937](https://github.com/gridstack/gridstack.js/issues/937)). diff --git a/package.json b/package.json index 729682318..b1b7e1035 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.2-dev", + "version": "0.5.3", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/demo/column.html b/spec/e2e/html/column.html similarity index 62% rename from demo/column.html rename to spec/e2e/html/column.html index 06c49b5ee..a79d42754 100644 --- a/demo/column.html +++ b/spec/e2e/html/column.html @@ -11,13 +11,14 @@ Column grid demo - + + - - + +
diff --git a/demo/demo.css b/demo/demo.css new file mode 100644 index 000000000..e6c1ab0c4 --- /dev/null +++ b/demo/demo.css @@ -0,0 +1,32 @@ +@import "../dist/gridstack.css"; + +.btn-primary { + color: #fff; + background-color: #007bff; +} + +.btn { + display: inline-block; + padding: .375rem .75rem; + line-height: 1.5; + border-radius: .25rem; +} + +a { + text-decoration: none; +} + +h1 { + font-size: 2.5rem; + margin-bottom: .5rem; +} + +.grid-stack { + background: lightgoldenrodyellow; +} + +.grid-stack-item-content { + color: #2c3e50; + text-align: center; + background-color: #18bc9c; +} \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index 0a9a87586..fc2a8d3f6 100644 --- a/demo/float.html +++ b/demo/float.html @@ -6,25 +6,12 @@ Float grid demo - - + - - - diff --git a/demo/knockout.html b/demo/knockout.html index d89280a7b..8113c40c8 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -6,42 +6,24 @@ Knockout.js demo - - + - - -

knockout.js Demo

-
- + Add Widget
-
-
- - - -

knockout.js Demo

-
- + Add Widget
-
-
- -
diff --git a/demo/right-to-left(rtl).html b/demo/right-to-left(rtl).html index 7ce6fae52..2b3c83673 100644 --- a/demo/right-to-left(rtl).html +++ b/demo/right-to-left(rtl).html @@ -6,38 +6,26 @@ Right-To-Left (RTL) demo - - - + + - - -

RTL Demo

-
- + Add Widget
-
-
diff --git a/demo/serialization.html b/demo/serialization.html index 39703f8e9..e9dbd8c8c 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -6,26 +6,12 @@ Serialization demo - - + - - -
diff --git a/demo/two.html b/demo/two.html index 7a8c4183e..0e52b8061 100644 --- a/demo/two.html +++ b/demo/two.html @@ -11,7 +11,6 @@ - From 0bb79196ba1f8f6240b3e2e3f8ff23358477edff Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 26 Nov 2019 11:23:41 -0800 Subject: [PATCH 0082/1298] more bootstrap removal --- .../1017-items-no-x-y-for-autoPosition.html | 16 ++-------------- spec/e2e/html/810-many-columns.html | 16 +--------------- spec/e2e/html/column.html | 16 +--------------- spec/e2e/html/gridstack-with-height.html | 19 +------------------ 4 files changed, 5 insertions(+), 62 deletions(-) diff --git a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html index c192dd334..bc847612d 100644 --- a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html +++ b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html @@ -10,27 +10,14 @@ - - + -
diff --git a/spec/e2e/html/column.html b/spec/e2e/html/column.html index bf5727740..b6546ea78 100644 --- a/spec/e2e/html/column.html +++ b/spec/e2e/html/column.html @@ -6,27 +6,13 @@ Column grid demo - - + - - -
diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index 041f2e0e3..9bc8f8479 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -6,38 +6,21 @@ gridstack.js tests - - + - - -

gridstack.js tests

-
-
- + + + + + + + + + + +

Advanced Demo

+
+
+
+
+ +
+
+ Drop here to remove! +
+
+
+
+
+ +
+
+ Drag me in into the dashboard! +
+
+
+
+
+
+
+
1
+
+
+
I can't be moved or dragged! +
+ +
+
+
+
+

+ Drag me! +

+ +

+ ...but don't resize me! +

+
+
+
4
+
+
+
5
+
+
+
6
+
+
+
7
+
+
+
8
+
+
+
9
+
+
+
10
+
+
+
11
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index d04c68b45..87306dcda 100644 --- a/demo/index.html +++ b/demo/index.html @@ -13,6 +13,7 @@
  • Right-To-Left (RTL) demo
  • Serialization demo
  • Two grids demo
  • +
  • Advance demo
  • Resize grid (responsive) demo
  • AniJS demo
  • diff --git a/demo/two.html b/demo/two.html index 0e52b8061..d1d7c6127 100644 --- a/demo/two.html +++ b/demo/two.html @@ -7,7 +7,7 @@ Two grids demo - + @@ -16,20 +16,10 @@ diff --git a/demo/knockout.html b/demo/knockout.html index 4c8bfbd05..b0bfab6aa 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -10,7 +10,7 @@ - + diff --git a/demo/knockout2.html b/demo/knockout2.html index d4d63ea92..c7d563362 100644 --- a/demo/knockout2.html +++ b/demo/knockout2.html @@ -10,7 +10,7 @@ - + diff --git a/demo/nested.html b/demo/nested.html index 6a276c6dd..e6cf6c74b 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -9,7 +9,7 @@ - + diff --git a/demo/responsive.html b/demo/responsive.html index a332f2afb..9422a3f33 100644 --- a/demo/responsive.html +++ b/demo/responsive.html @@ -10,7 +10,7 @@ - + diff --git a/demo/right-to-left(rtl).html b/demo/right-to-left(rtl).html index 2b3c83673..b0775a885 100644 --- a/demo/right-to-left(rtl).html +++ b/demo/right-to-left(rtl).html @@ -15,7 +15,7 @@ - + diff --git a/demo/serialization.html b/demo/serialization.html index e9dbd8c8c..e314178ca 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -9,7 +9,7 @@ - + diff --git a/demo/two.html b/demo/two.html index 7c4911e6f..aa6028960 100644 --- a/demo/two.html +++ b/demo/two.html @@ -11,7 +11,7 @@ - + diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 57f9f6e3a..bf442e913 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -27,7 +27,8 @@ Change log ## v0.5.4-dev (upcoming changes) - min files include rev number/license [#1075](https://github.com/gridstack/gridstack.js/pull/1075) -- npm package fix to exclude more temporary content +- npm package fix to exclude more temporary content [#1078](https://github.com/gridstack/gridstack.js/pull/1078) +- removed `jquery-ui/*` requirements from AMD packing in `gridstack.jQueryUI.js` as it was causing App compile missing errors now that we include a subset of jquery-ui ## v0.5.4 (2019-11-26) diff --git a/karma.conf.js b/karma.conf.js index 1754f84aa..05d9e2a4a 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -18,7 +18,7 @@ module.exports = function(config) { 'node_modules/jquery/dist/jquery.min.js', 'node_modules/core-js/client/shim.min.js', 'src/gridstack.js', - 'src/jquery-ui.min.js', + 'dist/jquery-ui.min.js', 'src/gridstack.jQueryUI.js', 'spec/*-spec.js', // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined diff --git a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html index bc847612d..c96a42053 100644 --- a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html +++ b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html @@ -13,7 +13,7 @@ - + diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html index 0937bf9dd..85131fe16 100644 --- a/spec/e2e/html/810-many-columns.html +++ b/spec/e2e/html/810-many-columns.html @@ -10,7 +10,7 @@ - + diff --git a/spec/e2e/html/column.html b/spec/e2e/html/column.html index b6546ea78..41a44ca47 100644 --- a/spec/e2e/html/column.html +++ b/spec/e2e/html/column.html @@ -10,7 +10,7 @@ - + diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html index 9bc8f8479..539b183d4 100644 --- a/spec/e2e/html/gridstack-with-height.html +++ b/spec/e2e/html/gridstack-with-height.html @@ -9,7 +9,7 @@ - + diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index e0884aa49..d565ae1bd 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -6,12 +6,7 @@ */ (function(factory) { if (typeof define === 'function' && define.amd) { - define(['jquery', 'gridstack', 'exports', 'jquery-ui/data', 'jquery-ui/disable-selection', - 'jquery-ui/focusable', 'jquery-ui/form', 'jquery-ui/ie', 'jquery-ui/keycode', 'jquery-ui/labels', - 'jquery-ui/jquery-1-7', 'jquery-ui/plugin', 'jquery-ui/safe-active-element', 'jquery-ui/safe-blur', - 'jquery-ui/scroll-parent', 'jquery-ui/tabbable', 'jquery-ui/unique-id', 'jquery-ui/version', - 'jquery-ui/widget', 'jquery-ui/widgets/mouse', 'jquery-ui/widgets/draggable', - 'jquery-ui/widgets/droppable', 'jquery-ui/widgets/resizable'], factory); + define(['jquery', 'gridstack', 'exports'], factory); } else if (typeof exports !== 'undefined') { try { jQuery = require('jquery'); } catch (e) {} try { gridstack = require('gridstack'); } catch (e) {} diff --git a/src/gridstack.scss b/src/gridstack.scss index c6ed9e6c0..ebf6d5796 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack CSS for default column size + * required gridstack CSS for default 12 column size * https://gridstackjs.com/ * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/jquery-ui.min.js b/src/jquery-ui.min.js deleted file mode 100644 index 1006cdcf0..000000000 --- a/src/jquery-ui.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2019-11-20 -* http://jqueryui.com -* Includes: widget.js, data.js, disable-selection.js, scroll-parent.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/mouse.js -* Copyright jQuery Foundation and other contributors; Licensed MIT @preserve*/ - -(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version="1.12.1";var e=0,i=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,o,n;for(n=0;null!=(o=i[n]);n++)try{s=t._data(o,"events"),s&&s.remove&&t(o).triggerHandler("remove")}catch(r){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var o,n,r,a={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},o=t[h][e],n=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new n(t,e)},t.extend(n,o,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),r=new i,r.options=t.widget.extend({},r.options),t.each(s,function(e,s){return t.isFunction(s)?(a[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,n=this._superApply;return this._super=t,this._superApply=o,e=s.apply(this,arguments),this._super=i,this._superApply=n,e}}(),void 0):(a[e]=s,void 0)}),n.prototype=t.widget.extend(r,{widgetEventPrefix:o?r.widgetEventPrefix||e:e},a,{constructor:n,namespace:h,widgetName:e,widgetFullName:l}),o?(t.each(o._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,n,i._proto)}),delete o._childConstructors):i._childConstructors.push(n),t.widget.bridge(e,n),n},t.widget.extend=function(e){for(var s,o,n=i.call(arguments,1),r=0,a=n.length;a>r;r++)for(s in n[r])o=n[r][s],n[r].hasOwnProperty(s)&&void 0!==o&&(e[s]=t.isPlainObject(o)?t.isPlainObject(e[s])?t.widget.extend({},e[s],o):t.widget.extend({},o):o);return e},t.widget.bridge=function(e,s){var o=s.prototype.widgetFullName||e;t.fn[e]=function(n){var r="string"==typeof n,a=i.call(arguments,1),h=this;return r?this.length||"instance"!==n?this.each(function(){var i,s=t.data(this,o);return"instance"===n?(h=s,!1):s?t.isFunction(s[n])&&"_"!==n.charAt(0)?(i=s[n].apply(s,a),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):h=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,o);e?(e.option(n||{}),e._init&&e._init()):t.data(this,o,new s(n,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,o,n,r=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(r={},s=e.split("."),e=s.shift(),s.length){for(o=r[e]=t.widget.extend({},this.options[e]),n=0;s.length-1>n;n++)o[s[n]]=o[s[n]]||{},o=o[s[n]];if(e=s.pop(),1===arguments.length)return void 0===o[e]?null:o[e];o[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];r[e]=i}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,o;for(i in e)o=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&o&&o.length&&(s=t(o.get()),this._removeClass(o,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,n){var r,a;for(a=0;i.length>a;a++)r=o.classesElementLookup[i[a]]||t(),r=e.add?t(t.unique(r.get().concat(e.element.get()))):t(r.not(e.element).get()),o.classesElementLookup[i[a]]=r,s.push(i[a]),n&&e.classes[i[a]]&&s.push(e.classes[i[a]])}var s=[],o=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,o){-1!==t.inArray(e.target,o)&&(i.classesElementLookup[s]=t(o.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var o="string"==typeof t||null===t,n={extra:o?e:i,keys:o?t:e,element:o?this.element:t,add:s};return n.element.toggleClass(this._classes(n),s),this},_on:function(e,i,s){var o,n=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=o=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,o=this.widget()),t.each(s,function(s,r){function a(){return e||n.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?n[r]:r).apply(n,arguments):void 0}"string"!=typeof r&&(a.guid=r.guid=r.guid||a.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+n.eventNamespace,p=h[2];p?o.on(l,p,a):i.on(l,a)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var o,n,r=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],n=i.originalEvent)for(o in n)o in i||(i[o]=n[o]);return this.element.trigger(i,s),!(t.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,o,n){"string"==typeof o&&(o={effect:o});var r,a=o?o===!0||"number"==typeof o?i:o.effect||i:e;o=o||{},"number"==typeof o&&(o={duration:o}),r=!t.isEmptyObject(o),o.complete=n,o.delay&&s.delay(o.delay),r&&t.effects&&t.effects.effect[a]?s[e](o):a!==e&&s[a]?s[a](o.duration,o.easing,n):s.queue(function(i){t(this)[e](),n&&n.call(s[0]),i()})}}),t.widget,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,o=e?/(auto|scroll|hidden)/:/(auto|scroll)/,n=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:o.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&n.length?n:t(this[0].ownerDocument||document)},t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var s=!1;t(document).on("mouseup",function(){s=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!s){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,o=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return o&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),s=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,s=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var o,n=t.ui[e].prototype;for(o in s)n.plugins[o]=n.plugins[o]||[],n.plugins[o].push([i,s[o]])},call:function(t,e,i,s){var o,n=t.plugins[e];if(n&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(o=0;n.length>o;o++)t.options[n[o][0]]&&n[o][1].apply(t.element,i)}},t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",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&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),o=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return o.parents("body").length||o.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&o[0]===this.element[0]&&this._setPositionRelative(),o[0]===this.element[0]||/(fixed|absolute)/.test(o.css("position"))||o.css("position","absolute"),o},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_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 e,i,s,o=this.options,n=this.document[0];return this.relativeContainer=null,o.containment?"window"===o.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===o.containment?(this.containment=[0,0,t(n).width()-this.helperProportions.width-this.margins.left,(t(n).height()||n.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):o.containment.constructor===Array?(this.containment=o.containment,void 0):("parent"===o.containment&&(o.containment=this.helper[0].parentNode),i=t(o.containment),s=i[0],s&&(e=/(scroll|auto)/.test(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),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?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.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,o,n,r=this.options,a=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return a&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.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.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),r.grid&&(o=r.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/r.grid[1])*r.grid[1]:this.originalPageY,l=i?o-this.offset.click.top>=i[1]||o-this.offset.click.top>i[3]?o:o-this.offset.click.top>=i[1]?o-r.grid[1]:o+r.grid[1]:o,n=r.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/r.grid[0])*r.grid[0]:this.originalPageX,h=i?n-this.offset.click.left>=i[0]||n-this.offset.click.left>i[2]?n:n-this.offset.click.left>=i[0]?n-r.grid[0]:n+r.grid[0]:n),"y"===r.axis&&(h=this.originalPageX),"x"===r.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:a?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:a?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var o=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,o))})},stop:function(e,i,s){var o=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,o))})},drag:function(e,i,s){t.each(s.sortables,function(){var o=!1,n=this;n.positionAbs=s.positionAbs,n.helperProportions=s.helperProportions,n.offset.click=s.offset.click,n._intersectsWith(n.containerCache)&&(o=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==n&&this._intersectsWith(this.containerCache)&&t.contains(n.element[0],this.element[0])&&(o=!1),o})),o?(n.isOver||(n.isOver=1,s._parent=i.helper.parent(),n.currentItem=i.helper.appendTo(n.element).data("ui-sortable-item",!0),n.options._helper=n.options.helper,n.options.helper=function(){return i.helper[0]},e.target=n.currentItem[0],n._mouseCapture(e,!0),n._mouseStart(e,!0,!0),n.offset.click.top=s.offset.click.top,n.offset.click.left=s.offset.click.left,n.offset.parent.left-=s.offset.parent.left-n.offset.parent.left,n.offset.parent.top-=s.offset.parent.top-n.offset.parent.top,s._trigger("toSortable",e),s.dropped=n.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,n.fromOutside=s),n.currentItem&&(n._mouseDrag(e),i.position=n.position)):n.isOver&&(n.isOver=0,n.cancelHelperRemoval=!0,n.options._revert=n.options.revert,n.options.revert=!1,n._trigger("out",e,n._uiHash(n)),n._mouseStop(e,!0),n.options.revert=n.options._revert,n.options.helper=n.options._helper,n.placeholder&&n.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var o=t("body"),n=s.options;o.css("cursor")&&(n._cursor=o.css("cursor")),o.css("cursor",n.cursor)},stop:function(e,i,s){var o=s.options;o._cursor&&t("body").css("cursor",o._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var o=t(i.helper),n=s.options;o.css("opacity")&&(n._opacity=o.css("opacity")),o.css("opacity",n.opacity)},stop:function(e,i,s){var o=s.options;o._opacity&&t(i.helper).css("opacity",o._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var o=s.options,n=!1,r=s.scrollParentNotHidden[0],a=s.document[0];r!==a&&"HTML"!==r.tagName?(o.axis&&"x"===o.axis||(s.overflowOffset.top+r.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,p=s.snapElements[d].top-s.margins.top,c=p+s.snapElements[d].height,h-g>_||m>l+g||p-g>b||v>c+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(o=g>=Math.abs(p-b),n=g>=Math.abs(c-v),r=g>=Math.abs(h-_),a=g>=Math.abs(l-m),o&&(i.position.top=s._convertPositionTo("relative",{top:p-s.helperProportions.height,left:0}).top),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),u=o||n||r||a,"outer"!==f.snapMode&&(o=g>=Math.abs(p-v),n=g>=Math.abs(c-b),r=g>=Math.abs(h-m),a=g>=Math.abs(l-_),o&&(i.position.top=s._convertPositionTo("relative",{top:p,left:0}).top),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(o||n||r||a||u)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=o||n||r||a||u)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var o,n=s.options,r=t.makeArray(t(n.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});r.length&&(o=parseInt(t(r[0]).css("zIndex"),10)||0,t(r).each(function(e){t(this).css("zIndex",o+e)}),this.css("zIndex",o+r.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var o=t(i.helper),n=s.options;o.css("zIndex")&&(n._zIndex=o.css("zIndex")),o.css("zIndex",n.zIndex)},stop:function(e,i,s){var o=s.options;o._zIndex&&t(i.helper).css("zIndex",o._zIndex)}}),t.ui.draggable,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i)) -},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.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 i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&o(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var o=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,o){if(!i.offset)return!1;var n=(e.positionAbs||e.position.absolute).left+e.margins.left,r=(e.positionAbs||e.position.absolute).top+e.margins.top,a=n+e.helperProportions.width,h=r+e.helperProportions.height,l=i.offset.left,p=i.offset.top,c=l+i.proportions().width,d=p+i.proportions().height;switch(s){case"fit":return n>=l&&c>=a&&r>=p&&d>=h;case"intersect":return n+e.helperProportions.width/2>l&&c>a-e.helperProportions.width/2&&r+e.helperProportions.height/2>p&&d>h-e.helperProportions.height/2;case"pointer":return t(o.pageY,p,i.proportions().height)&&t(o.pageX,l,i.proportions().width);case"touch":return(r>=p&&d>=r||h>=p&&d>=h||p>r&&h>d)&&(n>=l&&c>=n||a>=l&&c>=a||l>n&&a>c);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,o,n=t.ui.ddmanager.droppables[e.options.scope]||[],r=i?i.type:null,a=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;n.length>s;s++)if(!(n[s].options.disabled||e&&!n[s].accept.call(n[s].element[0],e.currentItem||e.element))){for(o=0;a.length>o;o++)if(a[o]===n[s].element[0]){n[s].proportions().height=0;continue t}n[s].visible="none"!==n[s].element.css("display"),n[s].visible&&("mousedown"===r&&n[s]._activate.call(n[s],i),n[s].offset=n[s].element.offset(),n[s].proportions({width:n[s].element[0].offsetWidth,height:n[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&o(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,r,a=o(e,this,this.options.tolerance,i),h=!a&&this.isover?"isout":a&&!this.isover?"isover":null;h&&(this.options.greedy&&(n=this.options.scope,r=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),r.length&&(s=t(r[0]).droppable("instance"),s.greedyChild="isover"===h)),s&&"isover"===h&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[h]=!0,this["isout"===h?"isover":"isout"]=!1,this["isover"===h?"_over":"_out"].call(this,i),s&&"isout"===h&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},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},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",o=!1;return e[s]>0?!0:(e[s]=1,o=e[s]>0,e[s]=0,o)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").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-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",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(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,o,n,r=this.options,a=this;if(this.handles=r.handles||(t(".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=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),o="ui-resizable-"+e,n=t("
    "),this._addClass(n,"ui-resizable-handle "+o),n.css({zIndex:r.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(n);this._renderAxis=function(e){var i,s,o,n;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:a._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),n=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),o=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(o,n),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){a.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),a.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,o=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(o=!0);return!this.options.disabled&&o},_mouseStart:function(e){var i,s,o,n=this.options,r=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),n.containment&&(i+=t(n.containment).scrollLeft()||0,s+=t(n.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:r.width(),height:r.height()},this.originalSize=this._helper?{width:r.outerWidth(),height:r.outerHeight()}:{width:r.width(),height:r.height()},this.sizeDiff={width:r.outerWidth()-r.width(),height:r.outerHeight()-r.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof n.aspectRatio?n.aspectRatio:this.originalSize.width/this.originalSize.height||1,o=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===o?this.axis+"-resize":o),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,o=this.originalMousePosition,n=this.axis,r=e.pageX-o.left||0,a=e.pageY-o.top||0,h=this._change[n];return this._updatePrevProperties(),h?(i=h.apply(this,[e,r,a]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,o,n,r,a,h,l=this.options,p=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&this._hasScroll(i[0],"left")?0:p.sizeDiff.height,n=s?0:p.sizeDiff.width,r={width:p.helper.width()-n,height:p.helper.height()-o},a=parseFloat(p.element.css("left"))+(p.position.left-p.originalPosition.left)||null,h=parseFloat(p.element.css("top"))+(p.position.top-p.originalPosition.top)||null,l.animate||this.element.css(t.extend(r,{top:h,left:a})),p.helper.height(p.size.height),p.helper.width(p.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,o,n,r=this.options;n={minWidth:this._isNumber(r.minWidth)?r.minWidth:0,maxWidth:this._isNumber(r.maxWidth)?r.maxWidth:1/0,minHeight:this._isNumber(r.minHeight)?r.minHeight:0,maxHeight:this._isNumber(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,s=n.minWidth/this.aspectRatio,i=n.maxHeight*this.aspectRatio,o=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),s>n.minHeight&&(n.minHeight=s),n.maxWidth>i&&(n.maxWidth=i),n.maxHeight>o&&(n.maxHeight=o)),this._vBoundaries=n},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,r=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),p=/nw|ne|n/.test(i);return n&&(t.width=e.minWidth),r&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),o&&(t.height=e.maxHeight),n&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),r&&p&&(t.top=h-e.minHeight),o&&p&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],o=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(o[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),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(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,o=this.originalPosition;return{top:o.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,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}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,o=i._proportionallyResizeElements,n=o.length&&/textarea/i.test(o[0].nodeName),r=n&&i._hasScroll(o[0],"left")?0:i.sizeDiff.height,a=n?0:i.sizeDiff.width,h={width:i.size.width-a,height:i.size.height-r},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,p=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,p&&l?{top:p,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};o&&o.length&&t(o[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,o,n,r,a,h=t(this).resizable("instance"),l=h.options,p=h.element,c=l.containment,d=c instanceof t?c.get(0):/parent/.test(c)?p.parent().get(0):c;d&&(h.containerElement=t(d),/document/.test(c)||c===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,o=h.containerSize.height,n=h.containerSize.width,r=h._hasScroll(d,"left")?d.scrollWidth:n,a=h._hasScroll(d)?d.scrollHeight:o,h.parentData={element:d,left:s.left,top:s.top,width:r,height:a}))},resize:function(e){var i,s,o,n,r=t(this).resizable("instance"),a=r.options,h=r.containerOffset,l=r.position,p=r._aspectRatio||e.shiftKey,c={top:0,left:0},d=r.containerElement,u=!0;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(r._helper?h.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-h.left:r.position.left-c.left),p&&(r.size.height=r.size.width/r.aspectRatio,u=!1),r.position.left=a.helper?h.left:0),l.top<(r._helper?h.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-h.top:r.position.top),p&&(r.size.width=r.size.height*r.aspectRatio,u=!1),r.position.top=r._helper?h.top:0),o=r.containerElement.get(0)===r.element.parent().get(0),n=/relative|absolute/.test(r.containerElement.css("position")),o&&n?(r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top):(r.offset.left=r.element.offset().left,r.offset.top=r.element.offset().top),i=Math.abs(r.sizeDiff.width+(r._helper?r.offset.left-c.left:r.offset.left-h.left)),s=Math.abs(r.sizeDiff.height+(r._helper?r.offset.top-c.top:r.offset.top-h.top)),i+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-i,p&&(r.size.height=r.size.width/r.aspectRatio,u=!1)),s+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-s,p&&(r.size.width=r.size.height*r.aspectRatio,u=!1)),u||(r.position.left=r.prevPosition.left,r.position.top=r.prevPosition.top,r.size.width=r.prevSize.width,r.size.height=r.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,o=e.containerPosition,n=e.containerElement,r=t(e.helper),a=r.offset(),h=r.outerWidth()-e.sizeDiff.width,l=r.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(n.css("position"))&&t(this).css({left:a.left-o.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(n.css("position"))&&t(this).css({left:a.left-o.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),o=s.options,n=s.originalSize,r=s.originalPosition,a={height:s.size.height-n.height||0,width:s.size.width-n.width||0,top:s.position.top-r.top||0,left:s.position.left-r.left||0};t(o.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),o={},n=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(n,function(t,e){var i=(s[e]||0)+(a[e]||0);i&&i>=0&&(o[e]=i||null)}),e.css(o)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,o=i.size,n=i.originalSize,r=i.originalPosition,a=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,p=h[1]||1,c=Math.round((o.width-n.width)/l)*l,d=Math.round((o.height-n.height)/p)*p,u=n.width+c,f=n.height+d,g=s.maxWidth&&u>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>u,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(u+=l),v&&(f+=p),g&&(u-=l),m&&(f-=p),/^(se|s|e)$/.test(a)?(i.size.width=u,i.size.height=f):/^(ne)$/.test(a)?(i.size.width=u,i.size.height=f,i.position.top=r.top-d):/^(sw)$/.test(a)?(i.size.width=u,i.size.height=f,i.position.left=r.left-c):((0>=f-p||0>=u-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-p>0?(i.size.height=f,i.position.top=r.top-d):(f=p-e.height,i.size.height=f,i.position.top=r.top+n.height-f),u-l>0?(i.size.width=u,i.position.left=r.left-c):(u=l-e.width,i.size.width=u,i.position.left=r.left+n.width-u))}}),t.ui.resizable}); \ No newline at end of file From dc35e6fba042dede0fbc09187d097b1730a06759 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 27 Nov 2019 16:26:29 -0800 Subject: [PATCH 0087/1298] v0.5.5 release --- bower.json | 2 +- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bower.json b/bower.json index b3229c321..04c2ec5a2 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.4-dev", + "version": "0.5.5", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index bf442e913..0b0d729a3 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v0.5.4-dev (upcoming changes)](#v054-dev-upcoming-changes) +- [v0.5.5 (2019-11-27)](#v055-2019-11-27) - [v0.5.4 (2019-11-26)](#v054-2019-11-26) - [v0.5.3 (2019-11-20)](#v053-2019-11-20) - [v0.5.2 (2019-11-13)](#v052-2019-11-13) @@ -24,7 +24,7 @@ Change log -## v0.5.4-dev (upcoming changes) +## v0.5.5 (2019-11-27) - min files include rev number/license [#1075](https://github.com/gridstack/gridstack.js/pull/1075) - npm package fix to exclude more temporary content [#1078](https://github.com/gridstack/gridstack.js/pull/1078) diff --git a/package.json b/package.json index 699e61dca..cae672503 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.4-dev", + "version": "0.5.5", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 8bcb6b325..1013c7484 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.5.4-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 0.5.5 - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 6de6f607e..5ccfb11df 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 0.5.4-dev +// Type definitions for Gridstack 0.5.5 // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index d565ae1bd..916912b8d 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.5.4-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 0.5.5 - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 05a6cd52d..5fc3b76cd 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.4-dev + * gridstack.js 0.5.5 * https://gridstackjs.com/ * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From a9bed402f809befdec7ec07ed787604d367a0f06 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 27 Nov 2019 18:10:14 -0800 Subject: [PATCH 0088/1298] next rev --- README.md | 14 +++++++------- bower.json | 2 +- doc/CHANGES.md | 5 +++++ package.json | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- 8 files changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 91afbaea2..65e07b6e6 100644 --- a/README.md +++ b/README.md @@ -62,17 +62,17 @@ Using gridstack.js with jQuery UI * Using CDN (minimized): ```html - - + + ``` * Using CDN (debug): ```html - - - - + + + + ``` * or local: @@ -191,7 +191,7 @@ $('.grid-stack').gridstack( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/bower.json b/bower.json index 04c2ec5a2..d214c7173 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.5", + "version": "0.5.5-dev", "homepage": "https://github.com/gridstack/gridstack.js", "authors": [ "Pavel Reznikov ", diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 0b0d729a3..9d4ebc075 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [v0.5.5-dev (upcoming changes)](#v055-dev-upcoming-changes) - [v0.5.5 (2019-11-27)](#v055-2019-11-27) - [v0.5.4 (2019-11-26)](#v054-2019-11-26) - [v0.5.3 (2019-11-20)](#v053-2019-11-20) @@ -24,6 +25,10 @@ Change log +## v0.5.5-dev (upcoming changes) + +TBD + ## v0.5.5 (2019-11-27) - min files include rev number/license [#1075](https://github.com/gridstack/gridstack.js/pull/1075) diff --git a/package.json b/package.json index cae672503..96a48dbb5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.5.5", + "version": "0.5.5-dev", "description": "gridstack.js is a jQuery plugin for widget layout", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 1013c7484..51d680450 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.5.5 - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 0.5.5-dev - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 5ccfb11df..67df167ac 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 0.5.5 +// Type definitions for Gridstack 0.5.5-dev // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 916912b8d..8019e10c1 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.5.5 - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 0.5.5-dev - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 5fc3b76cd..de5988976 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.5.5 + * gridstack.js 0.5.5-dev * https://gridstackjs.com/ * (c) 2014-2019 Dylan Weiss, Alain Dumesny, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From 55d679cedb7a75d492ea68069a2fb0b75891c579 Mon Sep 17 00:00:00 2001 From: Mohammad Ahmadi Date: Sat, 7 Dec 2019 19:41:17 +0330 Subject: [PATCH 0089/1298] corrected the alphabetical order of options in doc --- doc/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/README.md b/doc/README.md index 597cc5d4f..fbcc7f677 100644 --- a/doc/README.md +++ b/doc/README.md @@ -71,18 +71,18 @@ gridstack.js API * a string (ex: '10em', '100px', '10rem') * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files. * `'auto'` - height will be calculated from cell width. +- `column` - amount of columns (default: `12`) - `ddPlugin` - class that implement drag'n'drop functionallity for gridstack. If `false` grid will be static. (default: `null` - first available plugin will be used) - `disableDrag` - disallows dragging of widgets (default: `false`). +- `disableOneColumnMode` - disables the onColumnMode when the window width is less than minWidth (default: 'false') - `disableResize` - disallows resizing of widgets (default: `false`). - `draggable` - allows to override jQuery UI draggable options. (default: `{handle: '.grid-stack-item-content', scroll: false, appendTo: 'body'}`) +- `float` - enable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) - `handle` - draggable handle selector (default: `'.grid-stack-item-content'`) - `handleClass` - draggable handle class (e.g. `'grid-stack-item-content'`). If set `handle` is ignored (default: `null`) -- `column` - amount of columns (default: `12`) -- `maxRow` - maximum rows amount. Default is `0` which means no maximum rows -- `float` - enable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) - `itemClass` - widget class (default: `'grid-stack-item'`) +- `maxRow` - maximum rows amount. Default is `0` which means no maximum rows - `minWidth` - minimal width. If window width is less than or equal to, grid will be shown in one-column mode (default: `768`) -- `disableOneColumnMode` - disables the onColumnMode when the window width is less than minWidth (default: 'false') - `oneColumnModeClass` - class set on grid when in one column mode (default: 'grid-stack-one-column-mode') - `placeholderClass` - class for placeholder (default: `'grid-stack-placeholder'`) - `placeholderText` - placeholder default content (default: `''`) From 22e1d6b64fc305b01d6580f09e96fc5cb83cd517 Mon Sep 17 00:00:00 2001 From: Mohammad Ahmadi Date: Mon, 9 Dec 2019 14:40:33 +0330 Subject: [PATCH 0090/1298] corrected a typo in readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65e07b6e6..4bd7d7a91 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ $(function () { ## Migrating to v0.3.0 -As of v0.3.0, gridstack introduces a new plugin system. The drag'n'drop functionality has been modified to take advantage of this system. Because of this, and to avoid dependency on core code from jQuery UI, the plugin was functionality was moved to a separate file. +As of v0.3.0, gridstack introduces a new plugin system. The drag'n'drop functionality has been modified to take advantage of this system. Because of this, and to avoid dependency on core code from jQuery UI, the plugin functionality was moved to a separate file. To ensure gridstack continues to work, either include the additional `gridstack.jQueryUI.js` file into your HTML or use `gridstack.all.js`: From 8bcc65882fa3b68b5569155761de9a46da57074a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 9 Dec 2019 19:05:48 -0800 Subject: [PATCH 0091/1298] add `float(val?)` set/get method * to change the grid option, which will relayout widgets when gravity is back on * renamed internal _updateCounter (number) to _batchMode (boolean) was never a counter to begin with. --- demo/two.html | 14 ++++++- doc/CHANGES.md | 2 +- doc/README.md | 7 ++++ spec/gridstack-engine-spec.js | 28 +++++++++----- spec/gridstack-spec.js | 72 ++++++++++++++++++++++++++++------- src/gridstack.d.ts | 18 ++++++++- src/gridstack.js | 49 +++++++++++++++--------- 7 files changed, 143 insertions(+), 47 deletions(-) diff --git a/demo/two.html b/demo/two.html index aa6028960..63730ae85 100644 --- a/demo/two.html +++ b/demo/two.html @@ -76,15 +76,17 @@

    Two grids demo

    +
    diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 9d4ebc075..20f071ad2 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -27,7 +27,7 @@ Change log ## v0.5.5-dev (upcoming changes) -TBD +- add `float(val)` to set/get the grid float mode ## v0.5.5 (2019-11-27) diff --git a/doc/README.md b/doc/README.md index 597cc5d4f..bcc7ead6f 100644 --- a/doc/README.md +++ b/doc/README.md @@ -32,6 +32,7 @@ gridstack.js API - [enable()](#enable) - [enableMove(doEnable, includeNewWidgets)](#enablemovedoenable-includenewwidgets) - [enableResize(doEnable, includeNewWidgets)](#enableresizedoenable-includenewwidgets) + - [float(val?)](#floatval) - [getCellFromPixel(position[, useOffset])](#getcellfrompixelposition-useoffset) - [isAreaEmpty(x, y, width, height)](#isareaemptyx-y-width-height) - [locked(el, val)](#lockedel-val) @@ -314,6 +315,12 @@ Enables/disables widget resizing. `includeNewWidgets` will force new widgets to grid.resizable(this.container.children('.' + this.opts.itemClass), doEnable); ``` +### float(val?) + +set/get floating widgets (default: `false`) + +- `val` - boolean to set true/false, else get the current value + ### getCellFromPixel(position[, useOffset]) Get the position of the cell under a pixel on screen. diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index 1b7b9b20e..f073ff1ff 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -83,7 +83,7 @@ describe('gridstack engine', function() { }); beforeEach(function() { - engine._updateCounter = 0; + engine._batchMode = false; }); it('should return all dirty nodes', function() { @@ -94,8 +94,8 @@ describe('gridstack engine', function() { expect(nodes[1].idx).toEqual(2); }); - it('should\'n clean nodes if _updateCounter > 0', function() { - engine._updateCounter = 1; + it('should\'n clean nodes if _batchMode true', function() { + engine._batchMode = true; engine.cleanNodes(); expect(engine.getDirtyNodes().length).toBeGreaterThan(0); @@ -118,12 +118,22 @@ describe('gridstack engine', function() { it('should work on not float grids', function() { expect(engine.float).toEqual(false); engine.batchUpdate(); - expect(engine._updateCounter).toBeGreaterThan(0); + expect(engine._batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine._updateCounter).toEqual(0); + expect(engine._batchMode).toBeFalse(); expect(engine.float).toEqual(false); }); + + it('should work on float grids', function() { + engine.float = true; + engine.batchUpdate(); + expect(engine._batchMode).toBeTrue(); + expect(engine.float).toEqual(true); + engine.commit(); + expect(engine._batchMode).toBeFalse(); + expect(engine.float).toEqual(true); + }); }); describe('test batchUpdate/commit', function() { @@ -136,10 +146,10 @@ describe('gridstack engine', function() { it('should work on float grids', function() { expect(engine.float).toEqual(true); engine.batchUpdate(); - expect(engine._updateCounter).toBeGreaterThan(0); + expect(engine._batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine._updateCounter).toEqual(0); + expect(engine._batchMode).toBeFalse(); expect(engine.float).toEqual(true); }); }); @@ -163,8 +173,8 @@ describe('gridstack engine', function() { ]; }); - it('should\'n be called if _updateCounter > 0', function() { - engine._updateCounter = 1; + it('should\'n be called if _batchMode true', function() { + engine._batchMode = true; engine._notify(); expect(spy.callback).not.toHaveBeenCalled(); diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index 13c3c497c..9458c4f44 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -15,6 +15,8 @@ describe('gridstack', function() { '
    ' + '
    ' + '
    '; + // generic widget with no param + var widgetHTML = '
    hello
    '; beforeEach(function() { w = window; @@ -31,13 +33,12 @@ describe('gridstack', function() { it('should set default params correctly.', function() { e.call(w); - expect(w.column).toBeUndefined(); + expect(w.column).toEqual(12); expect(w.float).toBe(false); expect(w.maxRow).toEqual(0); expect(w.nodes).toEqual([]); expect(typeof w.onchange).toBe('function'); - expect(w._updateCounter).toEqual(0); - expect(w._float).toEqual(w.float); + expect(w._batchMode).toBeFalse(); }); it('should set params correctly.', function() { @@ -50,23 +51,19 @@ describe('gridstack', function() { expect(w.maxRow).toEqual(2); expect(w.nodes).toEqual(arr); expect(w.onchange).toEqual(fkt); - expect(w._updateCounter).toEqual(0); - expect(w._float).toEqual(w.float); + expect(w._batchMode).toBeFalse(); }); - - }); describe('batch update', function() { - it('should set float and counter when calling batchUpdate.', function() { + it('should set float and batchMode when calling batchUpdate.', function() { e.prototype.batchUpdate.call(w); expect(w.float).toBe(true); - expect(w._updateCounter).toEqual(1); + expect(w._batchMode).toBeTrue(); }); //test commit function - }); describe('sorting of nodes', function() { @@ -914,7 +911,6 @@ describe('gridstack', function() { it('should keep all widget options the same (autoPosition off', function() { $('.grid-stack').gridstack({float: true}); var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, 6, 7, 2, 3, false, 1, 4, 2, 5, 'coolWidget'); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); @@ -927,6 +923,35 @@ describe('gridstack', function() { expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); expect($widget.attr('data-gs-id')).toBe('coolWidget'); + + // should move widget to top with float=false + expect(grid.float()).toBe(true); + grid.float(false); + expect(grid.float()).toBe(false); + expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); + expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); // <--- from 7 to 4 below second original widget + expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); + expect($widget.attr('data-gs-auto-position')).toBe(undefined); + expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); + expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); + expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); + expect($widget.attr('data-gs-id')).toBe('coolWidget'); + + // should not move again (no-op) + grid.float(true); + expect(grid.float()).toBe(true); + expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); + expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); + expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); + expect($widget.attr('data-gs-auto-position')).toBe(undefined); + expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); + expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); + expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); + expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); + expect($widget.attr('data-gs-id')).toBe('coolWidget'); }); }); @@ -940,7 +965,6 @@ describe('gridstack', function() { it('should change x, y coordinates for widgets.', function() { $('.grid-stack').gridstack({float: true}); var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, 9, 7, 2, 3, true); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(9); @@ -958,7 +982,6 @@ describe('gridstack', function() { it('should keep all widget options the same (autoPosition off)', function() { $('.grid-stack').gridstack(); var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, {x: 8, height: 2, id: 'optionWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -983,7 +1006,6 @@ describe('gridstack', function() { it('should use default', function() { $('.grid-stack').gridstack(); var grid = $('.grid-stack').data('gridstack'); - var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, {x: 'foo', height: null, width: 'bar', height: ''}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -1011,6 +1033,28 @@ describe('gridstack', function() { }); }); + describe('method float()', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should match true/false only', function() { + $('.grid-stack').gridstack({float: true}); + var grid = $('.grid-stack').data('gridstack'); + expect(grid.float()).toBe(true); + grid.float(0); + expect(grid.float()).toBe(false); + grid.float(null); + expect(grid.float()).toBe(false); + grid.float(undefined); + expect(grid.float()).toBe(false); + grid.float(false); + expect(grid.float()).toBe(false); + }); + }); + describe('grid.destroy', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 67df167ac..16bbeb73e 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -142,6 +142,19 @@ interface GridStack { */ enableResize(doEnable: boolean, includeNewWidgets: boolean): void; + /** + * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) + * @param mode + */ + float(mode: boolean): void; + + /** + * get the current float mode + */ + float(): boolean; + + + /** * Get the position of the cell under a pixel on screen. * @param position the position of the pixel to resolve in @@ -263,8 +276,9 @@ interface GridStack { /** * (Experimental) Modify number of columns in the grid. Will attempt to update existing widgets - * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css`. - * @param column - Integer between 1 and 12. + * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], + * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) + * @param column - Integer > 0 (default 12). * @param doNotPropagate if true existing widgets will not be updated (optional) */ setColumn(column: number, doNotPropagate ? : boolean): void; diff --git a/src/gridstack.js b/src/gridstack.js index de5988976..88ba55d8a 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -292,33 +292,33 @@ var idSeq = 0; - var GridStackEngine = function(column, onchange, floatMode, maxRow, items) { - this.column = column; - this.float = floatMode || false; + var GridStackEngine = function(column, onchange, float, maxRow, items) { + this.column = column || 12; + this.float = float || false; this.maxRow = maxRow || 0; this.nodes = items || []; this.onchange = onchange || function() {}; - this._updateCounter = 0; - this._float = this.float; - this._addedNodes = []; this._removedNodes = []; + this._batchMode = false; }; GridStackEngine.prototype.batchUpdate = function() { - this._updateCounter = 1; + if (this._batchMode) return; + this._batchMode = true; + this._prevFloat = this.float; this.float = true; }; GridStackEngine.prototype.commit = function() { - if (this._updateCounter !== 0) { - this._updateCounter = 0; - this.float = this._float; - this._packNodes(); - this._notify(); - } + if (!this._batchMode) return; + this._batchMode = false; + this.float = this._prevFloat; + delete this._prevFloat; + this._packNodes(); + this._notify(); }; // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 @@ -462,7 +462,7 @@ var args = Array.prototype.slice.call(arguments, 0); args[0] = args[0] === undefined ? [] : [args[0]]; args[1] = args[1] === undefined ? true : args[1]; - if (this._updateCounter) { + if (this._batchMode) { return; } var deletedNodes = args[0].concat(this.getDirtyNodes()); @@ -470,7 +470,7 @@ }; GridStackEngine.prototype.cleanNodes = function() { - if (this._updateCounter) { + if (this._batchMode) { return; } this.nodes.forEach(function(n) { n._dirty = false; }); @@ -603,9 +603,6 @@ }; GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return node; - } if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof width !== 'number') { width = node.width; } @@ -1148,7 +1145,7 @@ }; GridStack.prototype._updateContainerHeight = function() { - if (this.grid._updateCounter) { + if (this.grid._batchMode) { return; } var height = this.grid.getGridHeight(); @@ -1821,6 +1818,20 @@ this.setColumn(column, doNotPropagate); } + GridStack.prototype.float = function(val) { + // getter - returns the opts stored mode + if (val === undefined) { + return this.opts.float || false; + } + // setter - updates the mode and relayout if gravity is back on + if (this.opts.float === val) { return; } + this.opts.float = this.grid.float = val || false; + if (!val) { + this.grid._packNodes(); + this.grid._notify(); + } + }; + /*eslint-disable camelcase */ GridStackEngine.prototype.batch_update = obsolete(GridStackEngine.prototype.batchUpdate); GridStackEngine.prototype._fix_collisions = obsolete(GridStackEngine.prototype._fixCollisions, From fa5d057b01c34f3c715e1f919cbd764f43230389 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 9 Dec 2019 19:22:35 -0800 Subject: [PATCH 0092/1298] updated float demo as well --- demo/float.html | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/demo/float.html b/demo/float.html index 8bca11f60..af90c5843 100644 --- a/demo/float.html +++ b/demo/float.html @@ -19,6 +19,7 @@

    Float grid demo



    @@ -34,19 +35,16 @@

    Float grid demo

    new function () { this.items = [ - {x: 0, y: 0, width: 2, height: 2}, + {x: 0, y: 6, width: 2, height: 2}, {x: 3, y: 1, width: 1, height: 2}, - {x: 4, y: 1, width: 1, height: 1}, + {x: 4, y: 2, width: 1, height: 1}, {x: 2, y: 3, width: 3, height: 1}, -// {x: 1, y: 4, width: 1, height: 1}, -// {x: 1, y: 3, width: 1, height: 1}, -// {x: 2, y: 4, width: 1, height: 1}, {x: 2, y: 5, width: 1, height: 1} ]; this.grid = $('.grid-stack').data('gridstack'); - this.addNewWidget = function () { + this.addNewWidget = function() { var node = this.items.pop() || { x: 12 * Math.random(), y: 5 * Math.random(), @@ -57,7 +55,13 @@

    Float grid demo

    return false; }.bind(this); + this.toggleFloat = function() { + this.grid.float(! this.grid.float()); + $('#float').html('float: ' + this.grid.float()); + }.bind(this);; + $('#add-widget').click(this.addNewWidget); + $('#float').click(this.toggleFloat); }; }); From 26f5cab0f21c60d3ae2e282a18b64742fbb8800c Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 12 Dec 2019 08:55:02 -0800 Subject: [PATCH 0093/1298] set grid-stack min-height so it doesn't collapse when empty --- demo/two.html | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/demo/two.html b/demo/two.html index 63730ae85..c9197877f 100644 --- a/demo/two.html +++ b/demo/two.html @@ -16,31 +16,29 @@ + + +
    +
    +
    +
    + Drag me in into the dashboard! +
    +
    +
    +
    +
    +
    +
    + This nested grid accepts new widget with class "newWidget"
    + The parent grid also accepts new widget but with a differenent class 'otherWidgetType'
      +
    +
    1
    +
    2
    +
    3
    +
    4
    +
    5
    +
    6
    +
    + +
    +
    +
    +
    +
    + + + + diff --git a/src/gridstack.js b/src/gridstack.js index 2bf792c1c..fbdc490d0 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -968,6 +968,7 @@ el.data('_gridstack_node_orig', origNode); el.on('drag', onDrag); + return false; // prevent parent from receiving msg (which may be grid as well) }) .on(self.container, 'dropout', function(event, ui) { // jquery-ui bug. Must verify widget is being dropped out @@ -986,6 +987,7 @@ self.placeholder.detach(); self._updateContainerHeight(); el.data('_gridstack_node', el.data('_gridstack_node_orig')); + return false; // prevent parent from receiving msg (which may be grid as well) }) .on(self.container, 'drop', function(event, ui) { self.placeholder.detach(); @@ -1027,6 +1029,7 @@ $(ui.draggable).removeData('_gridstack_node'); $(ui.draggable).removeData('_gridstack_node_orig'); self.container.trigger('dropped', [originalNode, node]); + return false; // prevent parent from receiving msg (which may be grid as well) }); } }; From ee53a1770bb92d4ab5d01396be31571ddc962a46 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 16 Feb 2020 19:23:47 -0800 Subject: [PATCH 0144/1298] added info on how to extend library * doc for #1087 --- README.md | 19 +++++++++++++++++++ demo/two.html | 7 ------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0ed49c507..b9eedc38f 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Join us on Slack: https://gridstackjs.troolee.com - [Basic usage](#basic-usage) - [Requirements](#requirements) - [API Documentation](#api-documentation) + - [Extend Library](#extend-library) - [Touch devices support](#touch-devices-support) - [gridstack.js for specific frameworks](#gridstackjs-for-specific-frameworks) - [Change grid columns](#change-grid-columns) @@ -127,6 +128,24 @@ Using gridstack.js with jQuery UI Documentation can be found [here](https://github.com/gridstack/gridstack.js/tree/develop/doc). +## Extend Library + +You can easily extend or patch gridstack with code like this: + +```javascript +$(function () { + // extend gridstack with our own custom method + window.GridStackUI.prototype.printCount = function() { + console.log('grid has ' + this.grid.nodes.length + ' items'); + }; + + $('.grid-stack').gridstack(); + + // you can now call on any grid this... + $('.grid-stack').data('gridstack').printCount(); + }); +``` + ## Touch devices support Please use [jQuery UI Touch Punch](https://github.com/furf/jquery-ui-touch-punch) to make jQuery UI Draggable/Resizable diff --git a/demo/two.html b/demo/two.html index a92573931..a68c035cd 100644 --- a/demo/two.html +++ b/demo/two.html @@ -11,13 +11,6 @@ - - From 4a48862fccb61465dc0738cdc66a8437bcfdc342 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 16 Feb 2020 23:43:23 -0800 Subject: [PATCH 0145/1298] WebComponent support * insert style before our grid (instead of head) to support webcomponent * fix #540 * tested on Chrome, FF, Edge, IE11 and all our demos *Note: I didn't have a way to test webcomponent support, but this should do it. --- README.md | 2 +- doc/CHANGES.md | 1 + src/gridstack.js | 34 ++++++++++++++++++---------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index b9eedc38f..3a493ef7b 100644 --- a/README.md +++ b/README.md @@ -143,7 +143,7 @@ $(function () { // you can now call on any grid this... $('.grid-stack').data('gridstack').printCount(); - }); +}); ``` ## Touch devices support diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 3ba16de67..11e2adbc9 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -31,6 +31,7 @@ Change log ## v0.6.3-dev (upcoming changes) +- fix [#540](https://github.com/gridstack/gridstack.js/issues/540) WebComponent support: CSS file now insert before grid instead of 'head' - fix [#1143](https://github.com/gridstack/gridstack.js/issues/1143) nested grids with different `acceptWidgets` class - fix [#1142](https://github.com/gridstack/gridstack.js/issues/1142) add/remove widget will also trigger change events when it should. - optimized `change` callback to save original x,y,w,h values and only call those that changed [1148](https://github.com/gridstack/gridstack.js/pull/1148) diff --git a/src/gridstack.js b/src/gridstack.js index fbdc490d0..19f220f53 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -75,22 +75,23 @@ return Utils.sortBy(nodes, function(n) { return (n.x + n.y * column); }); }, - createStylesheet: function(id) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.setAttribute('data-gs-style-id', id); - if (style.styleSheet) { - style.styleSheet.cssText = ''; - } else { - style.appendChild(document.createTextNode('')); - } - document.getElementsByTagName('head')[0].appendChild(style); - return style.sheet; - }, + createStylesheet: function(id, parent) { + var style = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.setAttribute('data-gs-style-id', id); + if (style.styleSheet) { + style.styleSheet.cssText = ''; + } else { + style.appendChild(document.createTextNode('')); + } + if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head + parent.insertBefore(style, parent.firstChild); + return style.sheet; + }, - removeStylesheet: function(id) { - $('STYLE[data-gs-style-id=' + id + ']').remove(); - }, + removeStylesheet: function(id) { + $('STYLE[data-gs-style-id=' + id + ']').remove(); + }, insertCSSRule: function(sheet, selector, rules, index) { if (typeof sheet.insertRule === 'function') { @@ -1068,7 +1069,8 @@ Utils.removeStylesheet(this._stylesId); } this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); - this._styles = Utils.createStylesheet(this._stylesId); + // insert style to parent (instead of 'head') to support WebComponent + this._styles = Utils.createStylesheet(this._stylesId, this.container.get(0).parentNode); if (this._styles !== null) { this._styles._max = 0; } From 33b4e32f967c9da5a3d600716b11b44dcb7eabcb Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 16 Feb 2020 23:45:36 -0800 Subject: [PATCH 0146/1298] lint fix --- src/gridstack.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/gridstack.js b/src/gridstack.js index 19f220f53..6436a9317 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -75,23 +75,23 @@ return Utils.sortBy(nodes, function(n) { return (n.x + n.y * column); }); }, - createStylesheet: function(id, parent) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.setAttribute('data-gs-style-id', id); - if (style.styleSheet) { - style.styleSheet.cssText = ''; - } else { - style.appendChild(document.createTextNode('')); - } - if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head - parent.insertBefore(style, parent.firstChild); - return style.sheet; - }, + createStylesheet: function(id, parent) { + var style = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.setAttribute('data-gs-style-id', id); + if (style.styleSheet) { + style.styleSheet.cssText = ''; + } else { + style.appendChild(document.createTextNode('')); + } + if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head + parent.insertBefore(style, parent.firstChild); + return style.sheet; + }, - removeStylesheet: function(id) { - $('STYLE[data-gs-style-id=' + id + ']').remove(); - }, + removeStylesheet: function(id) { + $('STYLE[data-gs-style-id=' + id + ']').remove(); + }, insertCSSRule: function(sheet, selector, rules, index) { if (typeof sheet.insertRule === 'function') { From 092ced2d3bcf390b3aee685dabbe6f9231c6d0b0 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 17 Feb 2020 07:42:06 -0800 Subject: [PATCH 0147/1298] 0.6.4 release --- README.md | 14 +++++++------- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- src/gridstack.scss | 2 +- 9 files changed, 21 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 3a493ef7b..fee89d4d6 100644 --- a/README.md +++ b/README.md @@ -73,19 +73,19 @@ $ yarn install gridstack * Using CDN (minimized): ```html - + - + ``` * Using CDN (debug): ```html - + - - - + + + ``` ## Basic usage @@ -195,7 +195,7 @@ $('.grid-stack').gridstack( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 11e2adbc9..7d369cec7 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [v0.6.3-dev (upcoming changes)](#v063-dev-upcoming-changes) +- [v0.6.4-dev (upcoming changes)](#v064-dev-upcoming-changes) +- [v0.6.4 (2020-02-17)](#v064-2020-02-17) - [v0.6.3 (2020-02-05)](#v063-2020-02-05) - [v0.6.2 (2020-02-03)](#v062-2020-02-03) - [v0.6.1 (2020-02-02)](#v061-2020-02-02) @@ -29,7 +30,11 @@ Change log -## v0.6.3-dev (upcoming changes) +## v0.6.4-dev (upcoming changes) + +- TBD + +## v0.6.4 (2020-02-17) - fix [#540](https://github.com/gridstack/gridstack.js/issues/540) WebComponent support: CSS file now insert before grid instead of 'head' - fix [#1143](https://github.com/gridstack/gridstack.js/issues/1143) nested grids with different `acceptWidgets` class diff --git a/package.json b/package.json index d40ee3b44..17e453570 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "0.6.3-dev", + "version": "0.6.4-dev", "description": "gridstack.js for dashboard layout and creation, with many wrappers (React, Angular, Ember, knockout...)", "main": "dist/gridstack.js", "repository": { diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 239c58cda..297995b3e 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 0.6.3-dev extra CSS for [2-11] columns (non default) + * gridstack 0.6.4-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 84ff52cda..9ac9454de 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.6.3-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 0.6.4-dev - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index ce4a18515..abcec6545 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 0.6.3-dev +// Type definitions for Gridstack 0.6.4-dev // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 8af747008..880374522 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.6.3-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 0.6.4-dev - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 6436a9317..e7c2c7ae2 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 0.6.3-dev + * gridstack.js 0.6.4-dev * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index d536c80ad..7d5ae3364 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 0.6.3-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 0.6.4-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From bba08cecf066664890845d7364d7fc192cbc1d31 Mon Sep 17 00:00:00 2001 From: Balaji Manoharan Date: Tue, 18 Feb 2020 10:22:46 -0600 Subject: [PATCH 0148/1298] README Update : Update name on ember project --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fee89d4d6..3f7acaa55 100644 --- a/README.md +++ b/README.md @@ -178,7 +178,7 @@ If you're still experiencing issues on touch devices please check [#444](https:/ search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... -- ember: [gridstack-ember](https://github.com/yahoo/ember-gridstack) +- ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) - AngularJS: [gridstack-angular](https://github.com/kdietrich/gridstack-angular) - Angular8: [lb-gridstack](https://github.com/pfms84/lb-gridstack) - Rails: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails) From b7f23a47d7d72650e278c8b379dce3bf6622baac Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 17 Feb 2020 19:19:58 -0800 Subject: [PATCH 0149/1298] removed jQuery from all API **BREAKING** BIG, BIG change for v1.0.0 release! * all calls/return take HTLMElement | string, not JQuery anymore * the `change|removed|added` events are now using standard calls with CustomEvent (rest are still JQ based) but all share basic same callback signature still. * added `grid.on(eventName, callback)` / `grid.off(eventName)` to hide native JQ events mix * updated all demos+doc to only plain DOM manipulation (only custom drag&drop jq UI remain) * created how to upgrade to 1.0.0 section * part of #1084 **Note**: had to modify jquery and jquery-ui loading (look for [alain] comment) to be able to compile it in and still work with webpack. Also (API break) * `setColumn(N)` is now `column(N)` and new `getColumn()` (matches other set/get methods) RANT: I hate git... must have wasted half day doing a rebase from develop on jquery branch only to scrap that and start over with latest and dumping my changes. --- .eslintignore | 1 + .travis.yml | 2 +- Gruntfile.js | 11 +- README.md | 193 +- demo/advance.html | 61 +- demo/anijs.html | 62 +- demo/column.html | 130 +- demo/experiment/test.html | 86 + demo/experiment/test2.html | 37 + demo/float.html | 68 +- demo/index.html | 1 - demo/knockout.html | 65 +- demo/knockout2.html | 99 - demo/nested.html | 48 +- demo/responsive.html | 86 +- demo/right-to-left(rtl).html | 65 +- demo/serialization.html | 114 +- demo/two.html | 120 +- doc/CHANGES.md | 22 +- doc/README.md | 124 +- karma.conf.js | 5 +- package.json | 40 +- .../1017-items-no-x-y-for-autoPosition.html | 16 +- spec/e2e/html/1142_change_event_missing.html | 22 +- .../html/1143_nested_acceptWidget_types.html | 49 +- spec/e2e/html/1155-max-row.html | 40 + spec/e2e/html/810-many-columns.html | 46 +- spec/e2e/html/events.html | 101 + spec/e2e/html/gridstack-with-height.html | 52 - spec/gridstack-engine-spec.js | 20 +- spec/gridstack-spec.js | 230 +- spec/gridstack-tests.ts | 24 + spec/utils-spec.js | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 219 +- src/gridstack.jQueryUI.js | 19 +- src/gridstack.js | 399 +- src/gridstack.scss | 2 +- src/jquery-ui.js | 3 +- src/jquery.js | 10598 ++++++++++++++++ yarn.lock | 1473 ++- 42 files changed, 12831 insertions(+), 1928 deletions(-) create mode 100644 demo/experiment/test.html create mode 100644 demo/experiment/test2.html delete mode 100644 demo/knockout2.html create mode 100644 spec/e2e/html/1155-max-row.html create mode 100644 spec/e2e/html/events.html delete mode 100644 spec/e2e/html/gridstack-with-height.html create mode 100644 spec/gridstack-tests.ts create mode 100644 src/jquery.js diff --git a/.eslintignore b/.eslintignore index f89435d1d..62f10bcb9 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,5 @@ dist/*.js demo/* spec/* +src/jquery.js src/jquery-ui.js diff --git a/.travis.yml b/.travis.yml index b67c2f3a1..e8b0fe1e0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- 8.11.1 +- 8.17.0 dist: trusty sudo: required addons: diff --git a/Gruntfile.js b/Gruntfile.js index cfdf45b2c..144d25ea2 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -10,8 +10,14 @@ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-protractor-webdriver'); + const sass = require('node-sass'); + grunt.initConfig({ sass: { + options: { + implementation: sass, + sourceMap: true + }, dist: { files: { 'dist/gridstack.css': 'src/gridstack.scss', @@ -37,8 +43,10 @@ module.exports = function(grunt) { files: { 'dist/gridstack.js': ['src/gridstack.js'], 'dist/gridstack.d.ts': ['src/gridstack.d.ts'], + 'dist/gridstack.all.d.ts': ['src/gridstack.d.ts'], 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'], 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], + 'dist/jquery.js': ['src/jquery.js'], 'dist/jquery-ui.js': ['src/jquery-ui.js'], } } @@ -57,8 +65,9 @@ module.exports = function(grunt) { 'dist/gridstack.min.js': ['src/gridstack.js'], 'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'], 'dist/gridstack-poly.min.js': ['src/gridstack-poly.js'], + 'dist/jquery.min.js': ['src/jquery.js'], 'dist/jquery-ui.min.js': ['src/jquery-ui.js'], - 'dist/gridstack.all.js': ['src/gridstack-poly.js', 'src/gridstack.js', 'src/jquery-ui.js', 'src/gridstack.jQueryUI.js'] + 'dist/gridstack.all.js': ['src/gridstack-poly.js', 'src/jquery.js', 'src/gridstack.js', 'src/jquery-ui.js', 'src/gridstack.jQueryUI.js'] } } }, diff --git a/README.md b/README.md index fee89d4d6..1c9a3422a 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,21 @@ gridstack.js ============ -[![Build Status](https://travis-ci.org/gridstack/gridstack.js.svg?branch=develop)](https://travis-ci.org/gridstack/gridstack.js) -[![Coverage Status](https://coveralls.io/repos/github/gridstack/gridstack.js/badge.svg?branch=develop)](https://coveralls.io/github/gridstack/gridstack.js?branch=develop) +[![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) [![Dependency Status](https://david-dm.org/gridstack/gridstack.js.svg)](https://david-dm.org/gridstack/gridstack.js) [![devDependency Status](https://david-dm.org/gridstack/gridstack.js/dev-status.svg)](https://david-dm.org/gridstack/gridstack.js#info=devDependencies) +[![Coverage Status](https://coveralls.io/repos/github/gridstack/gridstack.js/badge.svg?branch=develop)](https://coveralls.io/github/gridstack/gridstack.js?branch=develop) +[![downloads](https://img.shields.io/npm/dm/gridstack.svg)](https://www.npmjs.com/package/gridstack) +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/alaind831) -Mobile-friendly Javascript library for dashboard layout and creation. Making a drag-and-drop, multi-column dashboard has never been easier. Allows you to build draggable, responsive bootstrap v3-friendly layouts. It also has multiple bindings and works great with [React](https://reactjs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others, and comes with a Typescript definition out of the box. +Mobile-friendly Javascript library (with Typescript bindings) for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Allows you to build draggable, responsive bootstrap v4-friendly layouts. It also has multiple bindings and works great with [React](https://reactjs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others. Includes Typescript defines. -Inspired by no-longer maintained gridster.js, built with love. +Inspired by no-longer maintained gridster, built with love. Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). +If you find this lib useful, please [donate](https://www.paypal.me/alaind831) and help support it! + Join us on Slack: https://gridstackjs.troolee.com [![Slack Status](https://gridstackjs.troolee.com/badge.svg)](https://gridstackjs.troolee.com) @@ -28,12 +32,12 @@ Join us on Slack: https://gridstackjs.troolee.com - [Requirements](#requirements) - [API Documentation](#api-documentation) - [Extend Library](#extend-library) - - [Touch devices support](#touch-devices-support) - [gridstack.js for specific frameworks](#gridstackjs-for-specific-frameworks) - [Change grid columns](#change-grid-columns) - [Custom columns CSS](#custom-columns-css) - [Override resizable/draggable options](#override-resizabledraggable-options) - - [Migrating to v0.3.0](#migrating-to-v030) + - [Touch devices support](#touch-devices-support) + - [Migrating to v1.0.0](#migrating-to-v100) - [Changes](#changes) - [The Team](#the-team) @@ -43,7 +47,7 @@ Join us on Slack: https://gridstackjs.troolee.com Demo and examples ==== -Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). +Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/) Usage @@ -56,39 +60,43 @@ Usage [![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) ```bash -$ yarn install gridstack +yarn install gridstack +or +npm install --save gridstack ``` ## Include * local: - ```html - - + ``` * Using CDN (minimized): ```html - - - + + ``` -* Using CDN (debug): +if you need to debug, look at the git demo/ examples for non min includes. + +## Basic usage + +creating items dynamically... ```html - - - - - +
    + + ``` -## Basic usage +... or DOM created items ```html
    @@ -101,9 +109,7 @@ $ yarn install gridstack
    ``` @@ -111,17 +117,7 @@ see [jsfiddle sample](https://jsfiddle.net/adumesny/jqhkry7g) as running example ## Requirements -* [jQuery](http://jquery.com) (>= 1.8) -* `Array.prototype.find`, and `Number.isNaN()` for IE and older browsers. - * Note: as of v0.5.4 We supply a separate `gridstack-poly.js` for that -(part of `gridstack.all.js`) or you can look at other pollyfills -([core.js](https://github.com/zloirock/core-js#ecmascript-6-array) and [mozilla.org](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)). - -Using gridstack.js with jQuery UI - -* [jQuery UI](http://jqueryui.com) (>= 1.12.0). Minimum required components: Draggable, Droppable, Resizable (Widget, Mouse, core). - * Note: as of v0.5.4 we include this subset as `jquery-ui.js` (and min.js) which is part of `gridstack.all.js`. If you wish to bring your own lib, include the individual gridstack parts instead of all.js -* (Optional) [jquery-ui-touch-punch](https://github.com/furf/jquery-ui-touch-punch) for touch-based devices support +Gridstack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). All you need to include is `gridstack.all.js` and `gridstack.css` (layouts are done using CSS column based %). ## API Documentation @@ -132,48 +128,18 @@ Documentation can be found [here](https://github.com/gridstack/gridstack.js/tree You can easily extend or patch gridstack with code like this: -```javascript -$(function () { - // extend gridstack with our own custom method - window.GridStackUI.prototype.printCount = function() { - console.log('grid has ' + this.grid.nodes.length + ' items'); - }; - - $('.grid-stack').gridstack(); - - // you can now call on any grid this... - $('.grid-stack').data('gridstack').printCount(); -}); -``` - -## Touch devices support - -Please use [jQuery UI Touch Punch](https://github.com/furf/jquery-ui-touch-punch) to make jQuery UI Draggable/Resizable -working on touch-based devices. - -```html - - - - +```js +// extend gridstack with our own custom method +GridStack.prototype.printCount = function() { + console.log('grid has ' + this.grid.nodes.length + ' items'); +}; - -``` +var grid = GridStack.init(); -Also `alwaysShowResizeHandle` option may be useful: - -```javascript -$(function () { - var options = { - alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) - }; - $('.grid-stack').gridstack(options); -}); +// you can now call +grid.printCount(); ``` -If you're still experiencing issues on touch devices please check [#444](https://github.com/gridstack/gridstack.js/issues/444) - - ## gridstack.js for specific frameworks search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... @@ -190,7 +156,7 @@ GridStack makes it very easy if you need [1-12] columns out of the box (default 1) Change the `column` grid option when creating a grid to your number N ```js -$('.grid-stack').gridstack( {column: N} ); +GridStack.init( {column: N} ); ``` 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. @@ -260,32 +226,85 @@ and also have the `.grid-stack-N` prefix to support letting the user change colu You can override default `resizable`/`draggable` options. For instance to enable other then bottom right resizing handle you can init gridstack like: -```javascript -$('.grid-stack').gridstack({ +```js +GridStack.init({ resizable: { handles: 'e, se, s, sw, w' } }); ``` -Note: It's not recommended to enable `nw`, `n`, `ne` resizing handles. Their behaviour may be unexpected. - -## Migrating to v0.3.0 +Note: It's not recommended to enable `nw`, `n`, `ne` resizing handles. Their behavior may be unexpected. -As of v0.3.0, gridstack introduces a new plugin system. The drag'n'drop functionality has been modified to take advantage of this system. Because of this, and to avoid dependency on core code from jQuery UI, the plugin functionality was moved to a separate file. +## Touch devices support -To ensure gridstack continues to work, either include the additional `gridstack.jQueryUI.js` file into your HTML or use `gridstack.all.js`: +Please use [jQuery UI Touch Punch](https://github.com/furf/jquery-ui-touch-punch) to make jQuery UI Draggable/Resizable +working on touch-based devices. -```html - - -``` -or ```html + ``` -We're working on implementing support for other drag'n'drop libraries through the new plugin system. +Also `alwaysShowResizeHandle` option may be useful: + +```js +var options = { + alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) +}; +GridStack.init(options); +``` + +If you're still experiencing issues on touch devices please check [#444](https://github.com/gridstack/gridstack.js/issues/444) + + +## Migrating to v1.0.0 + +v1.0.0 removed Jquery from the API and external dependencies, which will require some code changes. Here is a list of the changes: + +1. your code only needs to include `gridstack.all.js` and `gristack.css` (don't include other) and is recommended you do that as internal dependencies will change. Right now jquery+jquery-ui (trimmed versions) are still being used internally for a short while. + +2. code change: + +**OLD** initializing code + adding a widget + adding an event: +```js +// initialization returned Jquery element, requiring second call to get GridStack var +$('.grid-stack').gridstack(opts?); +var grid = $('.grid-stack').data('grid-stack'); + +// returned Jquery element +grid.addWidget($('
    test
    '), {width: 2}); + +// jquery event handler +$('.grid-stack').on('added', function(e, items) {/* items contains info */}); + +``` +**NEW** +```js +// element identifier defaults to '.grid-stack', returns the grid +// for Typescript use window.GridStack.init() +var grid = GridStack.init(opts?, element?); + +// returns DOM element +grid.addWidget('
    test
    ', {width: 2}); + +// event handler +grid.on('added', function(e, items) {/* items contains info */}); + +``` + +Other vars/global changes +``` +`GridStackUI` --> `GridStack` +`GridStackUI.GridStackEngine` --> `GridStack.Engine` +`grid.container` (jquery grid wrapper) --> `grid.el` (grid DOM element) +`grid.grid` (GridStackEngine) --> `grid.engine` +`grid.setColumn(N)` --> `grid.column(N)` and new `grid.column()` to get value, old API still supported though +``` + +Recommend looking at the [many samples](../demo) for more code examples. + +We're working on implementing support for other drag'n'drop libraries through the plugin system. Right now it is still jquery-ui based (but minimal build content) Changes ===== diff --git a/demo/advance.html b/demo/advance.html index f80232148..08a26f36f 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -12,9 +12,10 @@ - - + + + + + + +
    +

    Drag demo

    +

    +
    Manual
    +
    HTML5 D&D
    +
    + + + + + \ No newline at end of file diff --git a/demo/experiment/test2.html b/demo/experiment/test2.html new file mode 100644 index 000000000..9afe50593 --- /dev/null +++ b/demo/experiment/test2.html @@ -0,0 +1,37 @@ + + + + + + + + +

    Drag the W3Schools image into the rectangle:

    + +
    +
    + + + + \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index da61a03d1..dbc66085b 100644 --- a/demo/float.html +++ b/demo/float.html @@ -7,10 +7,9 @@ Float grid demo - - - + + @@ -18,8 +17,8 @@

    Float grid demo



    @@ -27,41 +26,32 @@

    Float grid demo

    diff --git a/demo/index.html b/demo/index.html index a61462c88..3d4e51cf0 100644 --- a/demo/index.html +++ b/demo/index.html @@ -12,7 +12,6 @@

    Demos

  • Column
  • Float grid
  • Knockout.js
  • -
  • Knockout.js (2)
  • Nested grids
  • Responsive
  • Right-To-Left (RTL)
  • diff --git a/demo/knockout.html b/demo/knockout.html index b0bfab6aa..1021503a2 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -8,10 +8,11 @@ - - + + + @@ -34,10 +35,8 @@

    knockout.js Demo

    this.widgets = controller.widgets; this.afterAddWidget = function (items) { - if (grid == null) { - grid = $(componentInfo.element).find('.grid-stack').gridstack({ - auto: false - }).data('gridstack'); + if (!grid ) { + grid = GridStack.init({auto: false}); } var item = items.find(function (i) { return i.nodeType == 1 }); @@ -55,45 +54,43 @@

    knockout.js Demo

    [ '
    ', '
    ', - '
    ', + '
    ', '
    ', '
    ' ].join('') }); - $(function () { - var Controller = function (widgets) { - var self = this; + var Controller = function (widgets) { + var self = this; - this.widgets = ko.observableArray(widgets); + this.widgets = ko.observableArray(widgets); - this.addNewWidget = function () { - this.widgets.push({ - x: 0, - y: 0, - width: Math.floor(1 + 3 * Math.random()), - height: Math.floor(1 + 3 * Math.random()), - auto_position: true - }); - return false; - }; + this.addNewWidget = function () { + this.widgets.push({ + x: 0, + y: 0, + width: Math.floor(1 + 3 * Math.random()), + height: Math.floor(1 + 3 * Math.random()), + auto_position: true + }); + return false; + }; - this.deleteWidget = function (item) { - self.widgets.remove(item); - return false; - }; + this.deleteWidget = function (item) { + self.widgets.remove(item); + return false; }; + }; - var widgets = [ - {x: 0, y: 0, width: 2, height: 2, id: '0'}, - {x: 2, y: 0, width: 4, height: 2, id: '1'}, - {x: 6, y: 0, width: 2, height: 4, id: '2'}, - {x: 1, y: 2, width: 4, height: 2, id: '3'} - ]; + var widgets = [ + {x: 0, y: 0, width: 2, height: 2, id: '0'}, + {x: 2, y: 0, width: 4, height: 2, id: '1'}, + {x: 6, y: 0, width: 2, height: 4, id: '2'}, + {x: 1, y: 2, width: 4, height: 2, id: '3'} + ]; - var controller = new Controller(widgets); - ko.applyBindings(controller); - }); + var controller = new Controller(widgets); + ko.applyBindings(controller); diff --git a/demo/knockout2.html b/demo/knockout2.html deleted file mode 100644 index c7d563362..000000000 --- a/demo/knockout2.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Knockout.js demo - - - - - - - - - - -
    -

    knockout.js Demo

    - -
    -
    -
    - - - - - - diff --git a/demo/nested.html b/demo/nested.html index fde47e225..17203189b 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -8,9 +8,9 @@ - - + + - - + + + @@ -39,10 +40,8 @@

    RTL Demo

    this.widgets = controller.widgets; this.afterAddWidget = function (items) { - if (grid == null) { - grid = $(componentInfo.element).find('.grid-stack').gridstack({ - auto: false - }).data('gridstack'); + if (!grid) { + grid = GridStack.init({auto: false}); } var item = items.find(function (i) { return i.nodeType == 1 }); @@ -66,40 +65,38 @@

    RTL Demo

    ].join('') }); - $(function () { - var Controller = function (widgets) { - var self = this; + var Controller = function (widgets) { + var self = this; - this.widgets = ko.observableArray(widgets); + this.widgets = ko.observableArray(widgets); - this.addNewWidget = function () { - this.widgets.push({ - x: 0, - y: 0, - width: Math.floor(1 + 3 * Math.random()), - height: Math.floor(1 + 3 * Math.random()), - auto_position: true, - index: 'auto' - }); - return false; - }; + this.addNewWidget = function () { + this.widgets.push({ + x: 0, + y: 0, + width: Math.floor(1 + 3 * Math.random()), + height: Math.floor(1 + 3 * Math.random()), + auto_position: true, + index: 'auto' + }); + return false; + }; - this.deleteWidget = function (item) { - self.widgets.remove(item); - return false; - }; + this.deleteWidget = function (item) { + self.widgets.remove(item); + return false; }; + }; - var widgets = [ - {x: 0, y: 0, width: 2, height: 2, index: 1}, - {x: 2, y: 0, width: 4, height: 2, index: 2}, - {x: 6, y: 0, width: 2, height: 4, index: 3}, - {x: 1, y: 2, width: 4, height: 2, index: 4} - ]; + var widgets = [ + {x: 0, y: 0, width: 2, height: 2, index: 1}, + {x: 2, y: 0, width: 4, height: 2, index: 2}, + {x: 6, y: 0, width: 2, height: 4, index: 3}, + {x: 1, y: 2, width: 4, height: 2, index: 4} + ]; - var controller = new Controller(widgets); - ko.applyBindings(controller); - }); + var controller = new Controller(widgets); + ko.applyBindings(controller); diff --git a/demo/serialization.html b/demo/serialization.html index 4bff15491..5e9f78fcf 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -8,17 +8,17 @@ - - + +

    Serialization demo

    - Save Grid - Load Grid - Clear Grid + Save + Load + Clear


    @@ -26,73 +26,53 @@

    Serialization demo

    diff --git a/demo/two.html b/demo/two.html index a68c035cd..a94b1009c 100644 --- a/demo/two.html +++ b/demo/two.html @@ -10,9 +10,9 @@ - - + + @@ -37,12 +37,12 @@
    -
    +
    This nested grid accepts new widget with class "newWidget"
    - The parent grid also accepts new widget but with a differenent class 'otherWidgetType'
      -
    + The parent grid also accepts new widget but with a different class 'otherWidgetType'
      +
    1
    2
    3
    @@ -58,26 +58,23 @@
    diff --git a/spec/e2e/html/1155-max-row.html b/spec/e2e/html/1155-max-row.html new file mode 100644 index 000000000..f22dda505 --- /dev/null +++ b/spec/e2e/html/1155-max-row.html @@ -0,0 +1,40 @@ + + + + + + + maxRow Test + + + + + + + + + +
    +

    maxRow Test

    +
    +
    +
    + + + + diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html index 85131fe16..fc280f513 100644 --- a/spec/e2e/html/810-many-columns.html +++ b/spec/e2e/html/810-many-columns.html @@ -9,7 +9,7 @@ - + @@ -18,7 +18,7 @@

    Many Columns demo



    @@ -26,31 +26,23 @@

    Many Columns demo

    diff --git a/spec/e2e/html/events.html b/spec/e2e/html/events.html new file mode 100644 index 000000000..94d54f783 --- /dev/null +++ b/spec/e2e/html/events.html @@ -0,0 +1,101 @@ + + + + + + + Events test + + + + + + + + + +
    +

    Events test

    + +
    +
    +
    + + + + diff --git a/spec/e2e/html/gridstack-with-height.html b/spec/e2e/html/gridstack-with-height.html deleted file mode 100644 index 97cc86ce0..000000000 --- a/spec/e2e/html/gridstack-with-height.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - gridstack.js tests - - - - - - - - - -
    -

    gridstack.js tests

    -
    -
    -
    -
    - - - - diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index f073ff1ff..25c598d86 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -6,14 +6,14 @@ describe('gridstack engine', function() { beforeEach(function() { w = window; - e = w.GridStackUI.Engine; + e = GridStack.Engine; }); describe('test constructor', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12); + engine = new GridStack.Engine(12); }); it('should be setup properly', function() { @@ -28,7 +28,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12); + engine = new GridStack.Engine(12); }); it('should prepare a node', function() { @@ -53,7 +53,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); + engine = new GridStack.Engine(12, null, true); engine.nodes = [ engine._prepareNode({x: 3, y: 2, width: 3, height: 2}) ]; @@ -74,7 +74,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); + engine = new GridStack.Engine(12, null, true); engine.nodes = [ engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), @@ -112,7 +112,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12); + engine = new GridStack.Engine(12); }); it('should work on not float grids', function() { @@ -140,7 +140,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12, null, true); + engine = new GridStack.Engine(12, null, true); }); it('should work on float grids', function() { @@ -164,7 +164,7 @@ describe('gridstack engine', function() { }; spyOn(spy, 'callback'); - engine = new GridStackUI.Engine(12, spy.callback, true); + engine = new GridStack.Engine(12, spy.callback, true); engine.nodes = [ engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), @@ -223,7 +223,7 @@ describe('gridstack engine', function() { }; beforeEach(function() { - engine = new GridStackUI.Engine(12, null, false); + engine = new GridStack.Engine(12, null, false); }); it('shouldn\'t pack one node with y coord eq 0', function() { @@ -290,7 +290,7 @@ describe('gridstack engine', function() { var engine; beforeAll(function() { - engine = new GridStackUI.Engine(12); + engine = new GridStack.Engine(12); }); it('should return true for changed x', function() { diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index b96997e9a..a8aaa49cd 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -26,7 +26,7 @@ describe('gridstack', function() { beforeEach(function() { w = window; - e = w.GridStackUI.Engine; + e = GridStack.Engine; }); describe('setup of gridstack', function() { @@ -114,7 +114,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); $('.grid-stack').removeClass('grid-stack-animate'); grid.setAnimation(true); expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(true); @@ -124,7 +124,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); $('.grid-stack').addClass('grid-stack-animate'); grid.setAnimation(false); expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(false); @@ -144,7 +144,7 @@ describe('gridstack', function() { verticalMargin: 10, staticGrid: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); $('.grid-stack').removeClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); @@ -155,7 +155,7 @@ describe('gridstack', function() { verticalMargin: 10, staticGrid: false }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); $('.grid-stack').addClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); @@ -174,7 +174,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var container = $('.grid-stack'); var pixel = {top: 500, left: 200}; var cell = grid.getCellFromPixel(pixel); @@ -186,7 +186,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var pixel = {top: 500, left: 200}; var cell = grid.getCellFromPixel(pixel, false); expect(cell.x).toBe(2); @@ -197,7 +197,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var pixel = {top: 500, left: 200}; var cell = grid.getCellFromPixel(pixel, true); expect(cell.x).toBe(2); @@ -218,7 +218,7 @@ describe('gridstack', function() { verticalMargin: 10, column: 12 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var res = Math.round($('.grid-stack').outerWidth() / 12); expect(grid.cellWidth()).toBe(res); }); @@ -228,7 +228,7 @@ describe('gridstack', function() { verticalMargin: 10, column: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var res = Math.round($('.grid-stack').outerWidth() / 10); expect(grid.cellWidth()).toBe(res); }); @@ -249,10 +249,11 @@ describe('gridstack', function() { verticalMargin: verticalMargin, column: 12 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var container = $('.grid-stack'); - var grid = container.data('gridstack'); - var rows = container.attr('data-gs-current-height'); + var rows = parseInt(container.attr('data-gs-current-row')); + + expect(grid.getRow()).toBe(rows); expect(grid.cellHeight()).toBe(cellHeight); expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); @@ -273,7 +274,7 @@ describe('gridstack', function() { }); }); - describe('grid.setColumn', function() { + describe('grid.column', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); @@ -281,29 +282,29 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should have no changes', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); - expect(grid.opts.column).toBe(12); - grid.setColumn(12); - expect(grid.opts.column).toBe(12); + var grid = GridStack.init(); + expect(grid.column()).toBe(12); + grid.column(12); + expect(grid.column()).toBe(12); }); it('should SMALL change column number, no relayout', function() { var options = { column: 12 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); - grid.setColumn(10, false); - expect(grid.opts.column).toBe(10); + grid.column(10, false); + expect(grid.column()).toBe(10); for (var j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } - grid.setColumn(9, true); - expect(grid.opts.column).toBe(9); + grid.column(9, true); + expect(grid.column()).toBe(9); for (var j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } - grid.setColumn(12); - expect(grid.opts.column).toBe(12); + grid.column(12); + expect(grid.column()).toBe(12); for (var j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } @@ -313,7 +314,7 @@ describe('gridstack', function() { column: 12, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var el1 = $('#item1') var el2 = $('#item2') @@ -328,8 +329,8 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-width'))).toBe(4); expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // 1 column will have item1, item2 - grid.setColumn(1); - expect(grid.opts.column).toBe(1); + grid.column(1); + expect(grid.column()).toBe(1); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(1); @@ -341,7 +342,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // add default 1x1 item to the end (1 column) - var el3 = grid.addWidget(widgetHTML); + var el3 = $(grid.addWidget(widgetHTML)); expect(el3).not.toBe(null); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(6); @@ -349,8 +350,8 @@ describe('gridstack', function() { expect(parseInt(el3.attr('data-gs-height'))).toBe(1); // back to 12 column and initial layout (other than new item3) - grid.setColumn(12); - expect(grid.opts.column).toBe(12); + grid.column(12); + expect(grid.column()).toBe(12); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(4); @@ -367,8 +368,8 @@ describe('gridstack', function() { expect(parseInt(el3.attr('data-gs-height'))).toBe(1); // back to 1 column, move item2 to beginning to [3][1][2] vertically - grid.setColumn(1); - expect(grid.opts.column).toBe(1); + grid.column(1); + expect(grid.column()).toBe(1); grid.move(el3, 0, 0); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); @@ -386,8 +387,8 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // back to 12 column, el3 to be beginning still, but [1][2] to be in 1 columns still but wide 4x2 and 4x still - grid.setColumn(12); - expect(grid.opts.column).toBe(12); + grid.column(12); + expect(grid.column()).toBe(12); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); expect(parseInt(el3.attr('data-gs-width'))).toBe(1); @@ -404,9 +405,9 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // 2 column will have item1, item2, item3 in 1 column still but half the width - grid.setColumn(1); // test convert from small, should use 12 layout still - grid.setColumn(2); - expect(grid.opts.column).toBe(2); + grid.column(1); // test convert from small, should use 12 layout still + grid.column(2); + expect(grid.column()).toBe(2); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); @@ -437,10 +438,10 @@ describe('gridstack', function() { column: 12, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); - var el1 = grid.addWidget(widgetHTML, {width:1, height:1}); - var el2 = grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1}); - var el3 = grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2}); + var grid = GridStack.init(options); + var el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); + var el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); + var el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); // items are item1[1x1], item3[1x1], item2[2x1] expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -459,7 +460,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(1); // items are item1[1x1], item3[1x2], item2[1x1] in 1 column - grid.setColumn(1); + grid.column(1); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(1); @@ -481,10 +482,10 @@ describe('gridstack', function() { oneColumnModeDomSort: true, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); - var el1 = grid.addWidget(widgetHTML, {width:1, height:1}); - var el2 = grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1}); - var el3 = grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2}); + var grid = GridStack.init(options); + var el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); + var el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); + var el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); // items are item1[1x1], item3[1x1], item2[2x1] expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -503,7 +504,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(1); // items are item1[1x1], item2[1x1], item3[1x2] in 1 column dom ordered - grid.setColumn(1); + grid.column(1); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(1); @@ -533,7 +534,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.minWidth(items[i], 2); @@ -556,7 +557,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.maxWidth(items[i], 2); @@ -579,7 +580,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.minHeight(items[i], 2); @@ -602,7 +603,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.maxHeight(items[i], 2); @@ -625,7 +626,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); expect(shouldBeFalse).toBe(false); }); @@ -634,7 +635,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); expect(shouldBeTrue).toBe(true); }); @@ -648,21 +649,21 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should remove all children by default', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); grid.removeAll(); - expect(grid.grid.nodes).toEqual([]); + expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); it('should remove all children', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); grid.removeAll(true); - expect(grid.grid.nodes).toEqual([]); + expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); it('should remove gridstack part, leave DOM behind', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); grid.removeAll(false); - expect(grid.grid.nodes).toEqual([]); + expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).not.toBe(null); }); }); @@ -675,25 +676,25 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should remove first item (default), then second (true), then third (false)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); - expect(grid.grid.nodes.length).toEqual(2); + var grid = GridStack.init(); + expect(grid.engine.nodes.length).toEqual(2); var el1 = document.getElementById('item1'); expect(el1).not.toBe(null); grid.removeWidget(el1); - expect(grid.grid.nodes.length).toEqual(1); + expect(grid.engine.nodes.length).toEqual(1); expect(document.getElementById('item1')).toBe(null); expect(document.getElementById('item2')).not.toBe(null); var el2 = document.getElementById('item2'); grid.removeWidget(el2, true); - expect(grid.grid.nodes.length).toEqual(0); + expect(grid.engine.nodes.length).toEqual(0); expect(document.getElementById('item2')).toBe(null); var el3 = grid.addWidget(widgetHTML); expect(el3).not.toBe(null); grid.removeWidget(el3, false); - expect(grid.grid.nodes.length).toEqual(0); + expect(grid.engine.nodes.length).toEqual(0); expect(document.getElementById('item3')).not.toBe(null); }); }); @@ -711,7 +712,7 @@ describe('gridstack', function() { verticalMargin: 10, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); var $el; var $oldEl; @@ -727,7 +728,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); var $el; var $oldEl; @@ -751,7 +752,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should keep all widget options the same (autoPosition off', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack');; + var grid = GridStack.init({float: true});; var widget = grid.addWidget(widgetHTML, 6, 7, 2, 3, false, 1, 4, 2, 5, 'coolWidget'); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); @@ -804,7 +805,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should change x, y coordinates for widgets.', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack'); + var grid = GridStack.init({float: true}); var widget = grid.addWidget(widgetHTML, 9, 7, 2, 3, true); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(9); @@ -820,7 +821,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should autoPosition (missing X,Y)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {height: 2, id: 'optionWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -835,7 +836,7 @@ describe('gridstack', function() { expect($widget.attr('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (missing X)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {y: 9, height: 2, id: 'optionWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -850,7 +851,7 @@ describe('gridstack', function() { expect($widget.attr('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (missing Y)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {x: 9, height: 2, id: 'optionWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -865,7 +866,7 @@ describe('gridstack', function() { expect($widget.attr('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (correct X, missing Y)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {x: 8, height: 2, id: 'optionWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -880,7 +881,7 @@ describe('gridstack', function() { expect($widget.attr('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (empty options)', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -904,7 +905,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should use default', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); @@ -922,7 +923,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should clear x position', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack'); + var grid = GridStack.init({float: true}); var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, null, null, undefined); var $widget = $(widget); @@ -939,7 +940,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should match true/false only', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack'); + var grid = GridStack.init({float: true}); expect(grid.float()).toBe(true); grid.float(0); expect(grid.float()).toBe(false); @@ -964,21 +965,21 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); grid.destroy(); expect($('.grid-stack').length).toBe(0); - expect(grid.grid).toBe(null); + expect(grid.engine).toBe(null); }); it('should cleanup gridstack but leave elements', function() { var options = { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); grid.destroy(false); expect($('.grid-stack').length).toBe(1); expect($('.grid-stack-item').length).toBe(2); - expect(grid.grid).toBe(null); + expect(grid.engine).toBe(null); grid.destroy(); }); }); @@ -995,7 +996,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.resize(items[0], 5, 5); expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); @@ -1016,7 +1017,7 @@ describe('gridstack', function() { verticalMargin: 10, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.move(items[0], 5, 5); expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); @@ -1036,10 +1037,10 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid._updateElement(items[0], function(el, node) { - var newNode = grid.grid.moveNode(node); + var newNode = grid.engine.moveNode(node); expect(newNode).toBe(node); }); }); @@ -1048,14 +1049,14 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.minWidth(items[0], 1); grid.maxWidth(items[0], 2); grid.minHeight(items[0], 1); grid.maxHeight(items[0], 2); grid._updateElement(items[0], function(el, node) { - var newNode = grid.grid.moveNode(node); + var newNode = grid.engine.moveNode(node); expect(newNode).toBe(node); }); }); @@ -1074,7 +1075,7 @@ describe('gridstack', function() { verticalMargin: 10, float: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.update(items[0], 5, 5, 5 ,5); expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); @@ -1096,7 +1097,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var vm = grid.verticalMargin(); expect(vm).toBe(10); }); @@ -1105,7 +1106,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); grid.verticalMargin(11); expect(grid.verticalMargin()).toBe(11); }); @@ -1114,18 +1115,17 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10, }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); expect(grid.verticalMargin()).toBe(10); grid.verticalMargin(10); expect(grid.verticalMargin()).toBe(10); - // expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `height` is deprecated in v0.5.3 and has been replaced with `maxRow`. It will be **completely** removed in v1.0'); }); it('should not update styles', function() { var options = { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); spyOn(grid, '_updateStyles'); grid.verticalMargin(11, true); expect(grid._updateStyles).not.toHaveBeenCalled(); @@ -1145,7 +1145,7 @@ describe('gridstack', function() { verticalMargin: 10, rtl: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(true); }); it('should not add grid-stack-rtl class', function() { @@ -1153,7 +1153,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(false); }); }); @@ -1172,7 +1172,7 @@ describe('gridstack', function() { minWidth: 1, disableDrag: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); expect(grid.opts.disableDrag).toBe(true); grid.enableMove(true, true); @@ -1187,7 +1187,7 @@ describe('gridstack', function() { verticalMargin: 10, minWidth: 1 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.enableMove(false); for (var i = 0; i < items.length; i++) { @@ -1211,7 +1211,7 @@ describe('gridstack', function() { minWidth: 1, disableResize: true }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); expect(grid.opts.disableResize).toBe(true); grid.enableResize(true, true); @@ -1226,7 +1226,7 @@ describe('gridstack', function() { verticalMargin: 10, minWidth: 1 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.enableResize(false); for (var i = 0; i < items.length; i++) { @@ -1249,7 +1249,7 @@ describe('gridstack', function() { verticalMargin: 10, minWidth: 1 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); grid.enableResize(false); grid.enableMove(false); @@ -1277,7 +1277,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.locked(items[i], true); @@ -1289,7 +1289,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - var grid = $('.grid-stack').gridstack(options).data('gridstack'); + var grid = GridStack.init(options); var items = $('.grid-stack-item'); for (var i = 0; i < items.length; i++) { grid.locked(items[i], false); @@ -1343,9 +1343,9 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should move all 3 items to top-left with no space', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack'); + var grid = GridStack.init({float: true}); - var el3 = grid.addWidget(widgetHTML, {x: 3, y: 5}); + var el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1354,9 +1354,9 @@ describe('gridstack', function() { expect(parseInt(el3.attr('data-gs-y'))).toBe(0); }); it('not move locked item', function() { - var grid = $('.grid-stack').gridstack({float: true}).data('gridstack'); + var grid = GridStack.init({float: true}); - var el3 = grid.addWidget(widgetHTML, {x: 3, y: 5, locked: true, noMove: true}); + var el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5, locked: true, noMove: true})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1379,19 +1379,25 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('warning if OLD setGridWidth is called', function() { - var grid = $('.grid-stack').gridstack().data('gridstack'); + var grid = GridStack.init(); grid.setGridWidth(11); // old 0.5.2 API - expect(grid.opts.column).toBe(11); - expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `setGridWidth` is deprecated in v0.5.3 and has been replaced with `setColumn`. It will be **completely** removed in v1.0'); + expect(grid.column()).toBe(11); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `setGridWidth` is deprecated in v0.5.3 and has been replaced with `column`. It will be **completely** removed in v1.0'); + }); + it('warning if OLD setColumn is called', function() { + var grid = GridStack.init(); + grid.setColumn(10); // old 0.6.4 API + expect(grid.column()).toBe(10); + expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `setColumn` is deprecated in v0.6.4 and has been replaced with `column`. It will be **completely** removed in v1.0'); }); it('warning if OLD grid height is set', function() { - var grid = $('.grid-stack').gridstack({height: 10}).data('gridstack'); // old 0.5.2 Opt now maxRow + var grid = GridStack.init({height: 10}); // old 0.5.2 Opt now maxRow expect(grid.opts.maxRow).toBe(10); - expect(grid.grid.maxRow).toBe(10); + expect(grid.engine.maxRow).toBe(10); expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `height` is deprecated in v0.5.3 and has been replaced with `maxRow`. It will be **completely** removed in v1.0'); }); it('warning if OLD oneColumnModeClass is set (no changes)', function() { - $('.grid-stack').gridstack({oneColumnModeClass: 'foo'}).data('gridstack'); // deleted 0.6.3 Opt + GridStack.init({oneColumnModeClass: 'foo'}); // deleted 0.6.3 Opt expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `oneColumnModeClass` is deprecated in v0.6.3. Use class `.grid-stack-1` instead'); }); }); diff --git a/spec/gridstack-tests.ts b/spec/gridstack-tests.ts new file mode 100644 index 000000000..94a7e00bb --- /dev/null +++ b/spec/gridstack-tests.ts @@ -0,0 +1,24 @@ +import { GridStack, GridstackOptions, MousePosition } from '../src/gridstack'; + +var options: GridstackOptions = { + float: true +}; + +var grid: GridStack = GridStack.init(options); +var gsFromElement: GridStack = GridStack.get(); +var gsFromElement2: GridStack = ($('.grid-stack').get(0) as any).gridstack; + +if (gsFromElement !== grid) throw Error('These should match!'); +if (gsFromElement2 !== grid) throw Error('These should match!'); + +var gridItem = '
    Hello
    ' + +grid.addWidget(gridItem, {width: 2}); +grid.addWidget(gridItem, 1, 2, 3, 4, true); +grid.makeWidget(document.createElement('div')); +grid.batchUpdate(); +grid.cellHeight();; +grid.cellHeight(2); +grid.cellWidth(); +grid.getCellFromPixel({ left:20, top: 20 }); +grid.removeAll(false); diff --git a/spec/utils-spec.js b/spec/utils-spec.js index 8725c64cd..c2259eb43 100644 --- a/spec/utils-spec.js +++ b/spec/utils-spec.js @@ -4,7 +4,7 @@ describe('gridstack utils', function() { var utils; beforeEach(function() { - utils = window.GridStackUI.Utils; + utils = GridStack.Utils; }); describe('setup of utils', function() { diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 297995b3e..ddbd5404c 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 0.6.4-dev extra CSS for [2-11] columns (non default) + * gridstack 1.0.0 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 9ac9454de..0deccf6ab 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 0.6.4-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 1.0.0 - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index abcec6545..a0a9dfc0f 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 0.6.4-dev +// Type definitions for Gridstack 1.0.0 // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland @@ -8,9 +8,8 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped initially, but now part of gridstack.js // TypeScript Version: 2.8 -interface JQuery { - gridstack(options: GridstackOptions): JQuery; - data(key: 'gridstack'): GridStack; +interface Window { + GridStack: GridStack; } /* Other items in https://github.com/gridstack/gridstack.js/blob/develop/doc/README.md @@ -19,9 +18,46 @@ interface JQuery { * Events */ -type GridStackElement = string | HTMLElement | JQuery; +type GridStackElement = string | HTMLElement; +interface GridStackHTMLElement extends HTMLElement { + /** grid's parent DOM element points back to grid class */ + gridstack: GridStack; +} +type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' | + 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop'; interface GridStack { + /** + * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will + * simply return the existing instance (ignore any passed options). There is also a version that support + * multiple grids initialization. + * @param options grid options (optional) + * @param el element to convert to a grid (default to '.grid-stack' class selector) + * + * @example + * var grid = window.GridStack.init(); + * // Note: the HTMLElement (of type GridStackHTMLElement) will itself store a `gridstack: GridStack` value that can be retrieve later + * var grid = document.querySelector('.grid-stack').gridstack; + */ + init(options?: GridstackOptions, el?: GridStackElement): GridStack; + + /** + * Will initialize a list of elements (given a selector) and return an array of grids. + * @param options grid options (optional) + * @param selector element to convert to grids (default to '.grid-stack' class selector) + * + * @example + * var grids = window.GridStack.initAll(); + * grids.forEach(...) + */ + initAll(options?: GridstackOptions, selector?: string): GridStack[]; + + /** the HTML element tied to this grid after it's been initialized */ + el: GridStackHTMLElement; + + /** engine used to implement non DOM grid functionality */ + engine: GridStackEngine; + /** * Creates new widget and returns it. * @@ -30,22 +66,20 @@ interface GridStack { * See also `makeWidget()`. * * @example - * $('.grid-stack').gridstack(); - * var grid = $('.grid-stack').data('gridstack'); + * var grid = GridStack.init(); * grid.addWidget(el, {width: 3, autoPosition: true}); * * @param el widget to add * @param options widget position/size options (optional) */ - addWidget(el: GridStackElement, options ? : GridstackWidget): JQuery; + addWidget(el: GridStackElement, options ? : GridstackWidget): HTMLElement; /** * Creates new widget and returns it. * Legacy: Spelled out version of the widgets options, recommend use new version instead. * * @example - * $('.grid-stack').gridstack(); - * var grid = $('.grid-stack').data('gridstack'); + * var grid = GridStack.init(); * grid.addWidget(el, 0, 0, 3, 2, true); * * @param el widget to add @@ -61,10 +95,10 @@ interface GridStack { * @param id value for `data-gs-id` (optional) */ addWidget(el: GridStackElement, x ? : number, y ? : number, width ? : number, height ? : number, autoPosition ? : boolean, - minWidth ? : number, maxWidth ? : number, minHeight ? : number, maxHeight ? : number, id ? : number | string): JQuery; + minWidth ? : number, maxWidth ? : number, minHeight ? : number, maxHeight ? : number, id ? : number | string): HTMLElement; /** - * Initializes batch updates. You will see no changes until commit method is called. + * Initializes batch updates. You will see no changes until `commit()` method is called. */ batchUpdate(): void; @@ -101,6 +135,21 @@ interface GridStack { */ compact(): void; + /** + * set the number of columns in the grid. Will update existing widgets to conform to new number of columns, + * as well as cache the original layout so you can revert back to previous positions without loss. + * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], + * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) + * @param column - Integer > 0 (default 12). + * @param doNotPropagate if true existing widgets will not be updated (optional) + */ + column(column: number, doNotPropagate ? : boolean): void; + + /** + * get the number of columns in the grid (default 12) + */ + column(): number; + /** * Destroys a grid instance. * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). @@ -125,9 +174,6 @@ interface GridStack { /** * Enables/disables widget moving. - * This is a shortcut for: - * @example - * grid.movable(this.container.children('.' + this.opts.itemClass), doEnable); * * @param doEnable * @param includeNewWidgets will force new widgets to be draggable as per @@ -140,10 +186,6 @@ interface GridStack { * @param doEnable * @param includeNewWidgets will force new widgets to be draggable as per * doEnable`s value by changing the disableResize grid option. - * - * This is a shortcut for: - * @example - * grid.resizable(this.container.children('.' + this.opts.itemClass), doEnable); */ enableResize(doEnable: boolean, includeNewWidgets: boolean): void; @@ -158,8 +200,6 @@ interface GridStack { */ float(): boolean; - - /** * Get the position of the cell under a pixel on screen. * @param position the position of the pixel to resolve in @@ -171,6 +211,9 @@ interface GridStack { */ getCellFromPixel(position: MousePosition, useOffset ? : boolean): CellPosition; + /** returns the current number of rows */ + getRow(): number; + /** * Checks if specified area is empty. * @param x the position x. @@ -188,19 +231,18 @@ interface GridStack { locked(el: GridStackElement, val: boolean): void; /** - * If you add elements to your gridstack container by hand, you have to tell gridstack afterwards to make them widgets. + * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets. * If you want gridstack to add the elements for you, use addWidget instead. * Makes the given element a widget and returns it. * @param el widget to convert. * * @example - * $('.grid-stack').gridstack(); - * $('.grid-stack').append('
    ') - * var grid = $('.grid-stack').data('gridstack'); * grid.makeWidget('gsi-1'); */ - makeWidget(el: GridStackElement): JQuery; + makeWidget(el: GridStackElement): HTMLElement; /** * Set the maxWidth for a widget. @@ -245,6 +287,27 @@ interface GridStack { */ move(el: GridStackElement, x: number, y: number): void; + /** + * unsubscribe from the 'on' event below + * @param name of the event (see possible values) + */ + off(name: GridStackEvent): void; + + /** + * Event handler that extracts our CustomEvent data out automatically for receiving custom + * notifications (see doc for supported events) + * @param name of the event (see possible values) + * @param callback function called with event and optional second/third param + * (see README documentation for each signature). + * + * @example + * grid.on('added', function(e, items) { log('added ', items)} ); + * + * Note: in some cases it is the same as calling native handler and parsing the event. + * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} ); + */ + on(name: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void): void; + /** * Removes widget from the grid. * @param el widget to modify @@ -279,16 +342,6 @@ interface GridStack { */ setAnimation(doAnimate: boolean): void; - /** - * Modify number of columns in the grid. Will update existing widgets to conform to new number of columns, - * as well as cache the original layout so you can revert back to previous positions without loss. - * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], - * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) - * @param column - Integer > 0 (default 12). - * @param doNotPropagate if true existing widgets will not be updated (optional) - */ - setColumn(column: number, doNotPropagate ? : boolean): void; - /** * Toggle the grid static state. Also toggle the grid-stack-static class. * @param staticValue if true the grid become static. @@ -338,6 +391,20 @@ interface GridStack { willItFit(x: number, y: number, width: number, height: number, autoPosition: boolean): boolean; } +/** + * Defines the GridStack engine that does most no DOM grid manipulation. + * See GridStack methods and vars for descriptions. + * + * NOTE: values should not be modified - call the GridStack API instead + */ +interface GridStackEngine { + column: number; + float: boolean; + maxRow: number; + nodes: GridStackNode[]; + getRow(): number; +} + /** * Defines the coordinates of an object */ @@ -365,6 +432,10 @@ interface CellPosition { * @param maxWidth maximum width allowed during resize/creation (default?: undefined = un-constrained) * @param minHeight minimum height allowed during resize/creation (default?: undefined = un-constrained) * @param maxHeight maximum height allowed during resize/creation (default?: undefined = un-constrained) + * @param noResize prevent resizing (default?: undefined = un-constrained) + * @param noMove prevents moving (default?: undefined = un-constrained) + * @param locked prevents moving and resizing (default?: undefined = un-constrained) + * @param resizeHandles widgets can have their own resize handles. For example 'e,w' will make the particular widget only resize east and west. * @param id value for `data-gs-id` stored on the widget (default?: undefined) */ interface GridstackWidget { @@ -377,19 +448,29 @@ interface GridstackWidget { maxWidth ? : number; minHeight ? : number; maxHeight ? : number; + noResize ? : boolean; + noMove ? : boolean; + locked ? : boolean; + resizeHandles ?: string; id ? : number | string; } -declare namespace GridStackUI { - interface Utils { - /** - * Sorts array of nodes - * @param nodes array to sort - * @param dir 1 for asc, -1 for desc (optional) - * @param width width of the grid. If undefined the width will be calculated automatically (optional). - **/ - sort(nodes: HTMLElement[], dir ? : number, width ? : number): void; - } +/** + * internal descriptions describing the items in the grid + */ +interface GridStackNode extends GridstackWidget { + el: HTMLElement; + _grid: GridStack; +} + +interface Utils { + /** + * Sorts array of nodes + * @param nodes array to sort + * @param dir 1 for asc, -1 for desc (optional) + * @param width width of the grid. If undefined the width will be calculated automatically (optional). + **/ + sort(nodes: GridStackNode[], dir ? : number, width ? : number): void; } /** @@ -430,10 +511,15 @@ interface GridstackOptions { cellHeight ? : number | string; /** - * (internal?) unit for cellHeight (default? 'px') + * (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') */ cellHeightUnit ? : string; + /** + * number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns + */ + column ? : number; + /** class that implement drag'n'drop functionality for gridstack. If false grid will be static. * (default?: null - first available plugin will be used) */ @@ -442,11 +528,14 @@ interface GridstackOptions { /** disallows dragging of widgets (default?: false) */ disableDrag ? : boolean; + /** disables the onColumnMode when the window width is less than minWidth (default?: false) */ + disableOneColumnMode ? : boolean; + /** disallows resizing of widgets (default?: false). */ disableResize ? : boolean; /** - * allows to override jQuery UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) + * allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) */ draggable ? : {}; @@ -455,6 +544,11 @@ interface GridstackOptions { */ dragOut ? : boolean; + /** + * enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) + */ + float ? : boolean; + /** * draggable handle selector (default?: '.grid-stack-item-content') */ @@ -464,33 +558,20 @@ interface GridstackOptions { handleClass ? : string; /** - * number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns + * widget class (default?: 'grid-stack-item') */ - column ? : number; + itemClass ? : string; /** * maximum rows amount. Default? is 0 which means no maximum rows */ maxRow ? : number; - /** - * enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) - */ - float ? : boolean; - - /** - * widget class (default?: 'grid-stack-item') - */ - itemClass ? : string; - /** * minimal width. If window width is less, grid will be shown in one column mode (default?: 768) */ minWidth ? : number; - /** disables the onColumnMode when the window width is less than minWidth (default?: false) */ - disableOneColumnMode ? : boolean; - /** * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false) @@ -506,12 +587,12 @@ interface GridstackOptions { placeholderText ? : string; /** - * allows to override jQuery UI resizable options. (default?: { autoHide?: true, handles?: 'se' }) + * allows to override UI resizable options. (default?: { autoHide?: true, handles?: 'se' }) */ resizable ? : {}; /** - * if true widgets could be removed by dragging outside of the grid. It could also be a jQuery selector string, + * if true widgets could be removed by dragging outside of the grid. It could also be a selector string, * in this case widgets will be removed by dropping them there (default?: false) * See example (http://gridstack.github.io/gridstack.js/demo/two.html) */ @@ -529,9 +610,9 @@ interface GridstackOptions { rtl ? : boolean | 'auto'; /** - * makes grid static (default?: false).If true widgets are not movable/resizable. - * You don't even need jQueryUI draggable/resizable. A CSS class - * 'grid-stack-static' is also added to the container. + * makes grid static (default?: false). If `true` widgets are not movable/resizable. + * You don't even need draggable/resizable. A CSS class + * 'grid-stack-static' is also added to the element. */ staticGrid ? : boolean; @@ -543,7 +624,7 @@ interface GridstackOptions { verticalMargin ? : number | string; /** - * (internal?) unit for verticalMargin (default? 'px') + * (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem') */ verticalMarginUnit ? : string; } \ No newline at end of file diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index 880374522..315ccfd58 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,31 +1,32 @@ -/** gridstack.js 0.6.4-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 1.0.0 - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. */ (function(factory) { + /* we compile this in so no need for required loading if (typeof define === 'function' && define.amd) { define(['jquery', 'gridstack', 'exports'], factory); } else if (typeof exports !== 'undefined') { try { jQuery = require('jquery'); } catch (e) {} try { gridstack = require('gridstack'); } catch (e) {} - factory(jQuery, gridstack.GridStackUI, exports); - } else { - factory(jQuery, GridStackUI, window); + factory(jQuery, gridstack.GridStack, exports); + } else */{ + factory(jQuery, GridStack, window); } -})(function($, GridStackUI, scope) { +})(function($, GridStack, scope) { /** * @class JQueryUIGridStackDragDropPlugin * jQuery UI implementation of drag'n'drop gridstack plugin. */ function JQueryUIGridStackDragDropPlugin(grid) { - GridStackUI.GridStackDragDropPlugin.call(this, grid); + GridStack.DragDropPlugin.call(this, grid); } - GridStackUI.GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); + GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStackUI.GridStackDragDropPlugin.prototype); + JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype); JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) { @@ -57,7 +58,7 @@ } else { el.draggable($.extend({}, this.grid.opts.draggable, { containment: (this.grid.opts.isNested && !this.grid.opts.dragOut) ? - this.grid.container.parent() : + this.grid.$el.parent() : (this.grid.opts.draggable.containment || null), start: opts.start || function() {}, stop: opts.stop || function() {}, diff --git a/src/gridstack.js b/src/gridstack.js index e7c2c7ae2..f77cbc5e4 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,11 +1,12 @@ /** - * gridstack.js 0.6.4-dev + * gridstack.js 1.0.0 * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. * @preserve */ (function(factory) { + /* [alain] we compile jquery with our code, so no need to 'load' externally if (typeof define === 'function' && define.amd) { define(['jquery', 'exports'], factory); } else if (typeof exports !== 'undefined') { @@ -14,7 +15,7 @@ try { jQueryModule = require('jquery'); } catch (e) {} factory(jQueryModule || window.jQuery, exports); - } else { + } else */{ factory(window.jQuery, window); } })(function($, scope) { @@ -326,7 +327,7 @@ // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return this.nodes.find(function(n) { return el.get(0) === n.el.get(0); }); + return this.nodes.find(function(node) { return el === node.el }); }; GridStackEngine.prototype._fixCollisions = function(node) { @@ -587,7 +588,7 @@ })); } if (this.maxRow) { - res &= clone.getGridHeight() <= this.maxRow; + res &= clone.getRow() <= this.maxRow; } return res; @@ -605,7 +606,7 @@ 0, this.nodes.map(function(n) { return $.extend({}, n); })); clone.addNode(node); - return clone.getGridHeight() <= this.maxRow; + return clone.getRow() <= this.maxRow; }; GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) { @@ -663,7 +664,7 @@ return node; }; - GridStackEngine.prototype.getGridHeight = function() { + GridStackEngine.prototype.getRow = function() { return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); }; @@ -682,7 +683,7 @@ }; /** - * Construct a grid from the given element and options + * Construct a grid item from the given element and options * @param {GridStackElement} el * @param {GridstackOptions} opts */ @@ -692,22 +693,24 @@ opts = opts || {}; - this.container = $(el); + this.$el = $(el); // TODO: legacy code + this.el = this.$el.get(0); // exposed HTML element to the user obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead'); // container attributes - obsoleteAttr(this.container, 'data-gs-width', 'data-gs-column', 'v0.5.3'); - obsoleteAttr(this.container, 'data-gs-height', 'data-gs-max-row', 'v0.5.3'); + obsoleteAttr(this.$el, 'data-gs-width', 'data-gs-column', 'v0.5.3'); + obsoleteAttr(this.$el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3'); + obsoleteAttr(this.$el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0'); opts.itemClass = opts.itemClass || 'grid-stack-item'; - var isNested = this.container.closest('.' + opts.itemClass).length > 0; + var isNested = this.$el.closest('.' + opts.itemClass).length > 0; this.opts = Utils.defaults(opts, { - column: parseInt(this.container.attr('data-gs-column')) || 12, - maxRow: parseInt(this.container.attr('data-gs-max-row')) || 0, + column: parseInt(this.$el.attr('data-gs-column')) || 12, + maxRow: parseInt(this.$el.attr('data-gs-max-row')) || 0, itemClass: 'grid-stack-item', placeholderClass: 'grid-stack-placeholder', placeholderText: '', @@ -720,7 +723,7 @@ float: false, staticGrid: false, _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), - animate: Boolean(this.container.attr('data-gs-animate')) || false, + animate: Boolean(this.$el.attr('data-gs-animate')) || false, alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, resizable: Utils.defaults(opts.resizable || {}, { autoHide: !(opts.alwaysShowResizeHandle || false), @@ -756,11 +759,11 @@ this.dd = new this.opts.ddPlugin(this); if (this.opts.rtl === 'auto') { - this.opts.rtl = this.container.css('direction') === 'rtl'; + this.opts.rtl = this.$el.css('direction') === 'rtl'; } if (this.opts.rtl) { - this.container.addClass('grid-stack-rtl'); + this.$el.addClass('grid-stack-rtl'); } this.opts.isNested = isNested; @@ -774,17 +777,17 @@ } this.verticalMargin(this.opts.verticalMargin, true); - this.container.addClass(this.opts._class); + this.$el.addClass(this.opts._class); this._setStaticClass(); if (isNested) { - this.container.addClass('grid-stack-nested'); + this.$el.addClass('grid-stack-nested'); } this._initStyles(); - this.grid = new GridStackEngine(this.opts.column, function(nodes, detachNode) { + this.engine = new GridStackEngine(this.opts.column, function(nodes, detachNode) { detachNode = (detachNode === undefined ? true : detachNode); var maxHeight = 0; this.nodes.forEach(function(n) { @@ -793,10 +796,10 @@ nodes.forEach(function(n) { if (detachNode && n._id === null) { if (n.el) { - n.el.remove(); + $(n.el).remove(); } } else { - n.el + $(n.el) .attr('data-gs-x', n.x) .attr('data-gs-y', n.y) .attr('data-gs-width', n.width) @@ -809,13 +812,13 @@ if (this.opts.auto) { var elements = []; var _this = this; - this.container.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') + this.$el.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') .each(function(index, el) { el = $(el); var x = parseInt(el.attr('data-gs-x')); var y = parseInt(el.attr('data-gs-y')); elements.push({ - el: el, + el: el.get(0), // if x,y are missing (autoPosition) add them to end of list - but keep their respective DOM order i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * _this.opts.column }); @@ -824,7 +827,7 @@ this._prepareElement(item.el); }, this); } - this.grid._saveInitial(); // initial start of items + this.engine._saveInitial(); // initial start of items this.setAnimation(this.opts.animate); @@ -852,11 +855,11 @@ if (!self.opts.disableOneColumnMode && (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= self.opts.minWidth) { if (self.oneColumnMode) { return; } self.oneColumnMode = true; - self.setColumn(1); + self.column(1); } else { if (!self.oneColumnMode) { return; } self.oneColumnMode = false; - self.setColumn(self._prevColumn); + self.column(self._prevColumn); } }; @@ -901,36 +904,36 @@ if (!node._added) { node._added = true; - node.el = el; + node.el = el.get(0); node.autoPosition = true; node.x = x; node.y = y; - self.grid.cleanNodes(); - self.grid.beginUpdate(node); - self.grid.addNode(node); + self.engine.cleanNodes(); + self.engine.beginUpdate(node); + self.engine.addNode(node); - self.container.append(self.placeholder); + self.$el.append(self.placeholder); self.placeholder .attr('data-gs-x', node.x) .attr('data-gs-y', node.y) .attr('data-gs-width', node.width) .attr('data-gs-height', node.height) .show(); - node.el = self.placeholder; + node.el = self.placeholder.get(0); node._beforeDragX = node.x; node._beforeDragY = node.y; self._updateContainerHeight(); } - if (!self.grid.canMoveNode(node, x, y)) { + if (!self.engine.canMoveNode(node, x, y)) { return; } - self.grid.moveNode(node, x, y); + self.engine.moveNode(node, x, y); self._updateContainerHeight(); }; this.dd - .droppable(self.container, { + .droppable(self.$el, { accept: function(el) { el = $(el); var node = el.data('_gridstack_node'); @@ -940,7 +943,7 @@ return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets); } }) - .on(self.container, 'dropover', function(event, ui) { + .on(self.$el, 'dropover', function(event, ui) { var el = $(ui.draggable); var width, height; @@ -963,7 +966,7 @@ draggingElement = el; - var node = self.grid._prepareNode({width: width, height: height, _added: false, _temporary: true}); + var node = self.engine._prepareNode({width: width, height: height, _added: false, _temporary: true}); node.isOutOfGrid = true; el.data('_gridstack_node', node); el.data('_gridstack_node_orig', origNode); @@ -971,7 +974,7 @@ el.on('drag', onDrag); return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(self.container, 'dropout', function(event, ui) { + .on(self.$el, 'dropout', function(event, ui) { // jquery-ui bug. Must verify widget is being dropped out // check node variable that gets set when widget is out of grid var el = $(ui.draggable); @@ -984,13 +987,13 @@ } el.unbind('drag', onDrag); node.el = null; - self.grid.removeNode(node); + self.engine.removeNode(node); self.placeholder.detach(); self._updateContainerHeight(); el.data('_gridstack_node', el.data('_gridstack_node_orig')); return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(self.container, 'drop', function(event, ui) { + .on(self.$el, 'drop', function(event, ui) { self.placeholder.detach(); var node = $(ui.draggable).data('_gridstack_node'); @@ -1003,7 +1006,7 @@ originalNode._grid._triggerRemoveEvent(); } $(ui.helper).remove(); - node.el = el; + node.el = el.get(0); self.placeholder.hide(); Utils.removePositioningStyles(el); el.find('div.ui-resizable-handle').remove(); @@ -1018,59 +1021,64 @@ .removeData('draggable') .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') .unbind('drag', onDrag); - self.container.append(el); + self.$el.append(el); self._prepareElementsByNode(el, node); self._updateContainerHeight(); - self.grid._addedNodes.push(node); + self.engine._addedNodes.push(node); self._triggerAddEvent(); self._triggerChangeEvent(); - self.grid.endUpdate(); + self.engine.endUpdate(); $(ui.draggable).unbind('drag', onDrag); $(ui.draggable).removeData('_gridstack_node'); $(ui.draggable).removeData('_gridstack_node_orig'); - self.container.trigger('dropped', [originalNode, node]); + self.$el.trigger('dropped', [originalNode, node]); return false; // prevent parent from receiving msg (which may be grid as well) }); } }; GridStack.prototype._triggerChangeEvent = function(/*forceTrigger*/) { - if (this.grid._batchMode) { return; } - var elements = this.grid.getDirtyNodes(true); // verify they really changed + if (this.engine._batchMode) { return; } + var elements = this.engine.getDirtyNodes(true); // verify they really changed if (elements && elements.length) { - this.grid._layoutsNodesChange(elements); - this.container.trigger('change', [elements]); + this.engine._layoutsNodesChange(elements); + this._triggerEvent('change', elements); } - this.grid._saveInitial(); // we called, now reset initial values & dirty flags + this.engine._saveInitial(); // we called, now reset initial values & dirty flags }; GridStack.prototype._triggerAddEvent = function() { - if (this.grid._batchMode) { return; } - if (this.grid._addedNodes && this.grid._addedNodes.length > 0) { - this.grid._layoutsNodesChange(this.grid._addedNodes); + if (this.engine._batchMode) { return; } + if (this.engine._addedNodes && this.engine._addedNodes.length > 0) { + this.engine._layoutsNodesChange(this.engine._addedNodes); // prevent added nodes from also triggering 'change' event (which is called next) - this.grid._addedNodes.forEach(function (n) { delete n._dirty; }); - this.container.trigger('added', [this.grid._addedNodes]); - this.grid._addedNodes = []; + this.engine._addedNodes.forEach(function (n) { delete n._dirty; }); + this._triggerEvent('added', this.engine._addedNodes); + this.engine._addedNodes = []; } }; GridStack.prototype._triggerRemoveEvent = function() { - if (this.grid._batchMode) { return; } - if (this.grid._removedNodes && this.grid._removedNodes.length > 0) { - this.container.trigger('removed', [this.grid._removedNodes]); - this.grid._removedNodes = []; + if (this.engine._batchMode) { return; } + if (this.engine._removedNodes && this.engine._removedNodes.length > 0) { + this._triggerEvent('removed', this.engine._removedNodes); + this.engine._removedNodes = []; } }; + GridStack.prototype._triggerEvent = function(name, data) { + var event = new CustomEvent(name, {detail: data}); + this.el.dispatchEvent(event); + }; + GridStack.prototype._initStyles = function() { if (this._stylesId) { Utils.removeStylesheet(this._stylesId); } this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); // insert style to parent (instead of 'head') to support WebComponent - this._styles = Utils.createStylesheet(this._stylesId, this.container.get(0).parentNode); + this._styles = Utils.createStylesheet(this._stylesId, this.el.parentNode); if (this._styles !== null) { this._styles._max = 0; } @@ -1146,29 +1154,29 @@ }; GridStack.prototype._updateContainerHeight = function() { - if (this.grid._batchMode) { return; } - var height = this.grid.getGridHeight(); + if (this.engine._batchMode) { return; } + var row = this.engine.getRow(); // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below - var cssMinHeight = parseInt(this.container.css('min-height')); + var cssMinHeight = parseInt(this.$el.css('min-height')); if (cssMinHeight > 0) { var verticalMargin = this.opts.verticalMargin; - var minHeight = Math.round((cssMinHeight + verticalMargin) / (this.cellHeight() + verticalMargin)); - if (height < minHeight) { - height = minHeight; + var minRow = Math.round((cssMinHeight + verticalMargin) / (this.cellHeight() + verticalMargin)); + if (row < minRow) { + row = minRow; } } - this.container.attr('data-gs-current-height', height); + this.$el.attr('data-gs-current-row', row); if (!this.opts.cellHeight) { return ; } if (!this.opts.verticalMargin) { - this.container.css('height', (height * (this.opts.cellHeight)) + this.opts.cellHeightUnit); + this.$el.css('height', (row * (this.opts.cellHeight)) + this.opts.cellHeightUnit); } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - this.container.css('height', (height * (this.opts.cellHeight + this.opts.verticalMargin) - + this.$el.css('height', (row * (this.opts.cellHeight + this.opts.verticalMargin) - this.opts.verticalMargin) + this.opts.cellHeightUnit); } else { - this.container.css('height', 'calc(' + ((height * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + - ' + ' + ((height * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); + this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + + ' + ' + ((row * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); } }; @@ -1218,8 +1226,8 @@ var distance = ui.position.top - node._prevYPix; node._prevYPix = ui.position.top; Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.grid.column || y < 0 || - (!self.grid.float && y > self.grid.getGridHeight())) { + if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 || + (!self.engine.float && y > self.engine.getRow())) { if (!node._temporaryRemoved) { if (self.opts.removable === true) { self._setupRemovingTimeout(el); @@ -1230,7 +1238,7 @@ self.placeholder.detach(); self.placeholder.hide(); - self.grid.removeNode(node); + self.engine.removeNode(node); self._updateContainerHeight(); node._temporaryRemoved = true; @@ -1241,15 +1249,15 @@ self._clearRemovingTimeout(el); if (node._temporaryRemoved) { - self.grid.addNode(node); + self.engine.addNode(node); self.placeholder .attr('data-gs-x', x) .attr('data-gs-y', y) .attr('data-gs-width', width) .attr('data-gs-height', height) .show(); - self.container.append(self.placeholder); - node.el = self.placeholder; + self.$el.append(self.placeholder); + node.el = self.placeholder.get(0); node._temporaryRemoved = false; } } @@ -1261,7 +1269,7 @@ // width and height are undefined if not resizing var lastTriedWidth = width !== undefined ? width : node.lastTriedWidth; var lastTriedHeight = height !== undefined ? height : node.lastTriedHeight; - if (!self.grid.canMoveNode(node, x, y, width, height) || + if (!self.engine.canMoveNode(node, x, y, width, height) || (node.lastTriedX === x && node.lastTriedY === y && node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) { return; @@ -1270,7 +1278,7 @@ node.lastTriedY = y; node.lastTriedWidth = width; node.lastTriedHeight = height; - self.grid.moveNode(node, x, y, width, height); + self.engine.moveNode(node, x, y, width, height); self._updateContainerHeight(); if (event.type === 'resize') { @@ -1279,23 +1287,23 @@ }; var onStartMoving = function(event, ui) { - self.container.append(self.placeholder); + self.$el.append(self.placeholder); var o = $(this); - self.grid.cleanNodes(); - self.grid.beginUpdate(node); + self.engine.cleanNodes(); + self.engine.beginUpdate(node); cellWidth = self.cellWidth(); var strictCellHeight = self.cellHeight(); // TODO: cellHeight = cellHeight() causes issue (i.e. remove strictCellHeight above) otherwise // when sizing up we jump almost right away to next size instead of half way there. Not sure // why as we don't use ceil() in many places but round() instead. - cellHeight = self.container.height() / parseInt(self.container.attr('data-gs-current-height')); + cellHeight = self.$el.height() / parseInt(self.$el.attr('data-gs-current-row')); self.placeholder .attr('data-gs-x', o.attr('data-gs-x')) .attr('data-gs-y', o.attr('data-gs-y')) .attr('data-gs-width', o.attr('data-gs-width')) .attr('data-gs-height', o.attr('data-gs-height')) .show(); - node.el = self.placeholder; + node.el = self.placeholder.get(0); node._beforeDragX = node.x; node._beforeDragY = node.y; node._prevYPix = ui.position.top; @@ -1319,7 +1327,7 @@ // var forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? self.placeholder.detach(); - node.el = o; + node.el = o.get(0); self.placeholder.hide(); if (node._isAboutToRemove) { @@ -1347,24 +1355,24 @@ node.x = node._beforeDragX; node.y = node._beforeDragY; node._temporaryRemoved = false; - self.grid.addNode(node); + self.engine.addNode(node); } } self._updateContainerHeight(); self._triggerChangeEvent(/*forceNotify*/); - self.grid.endUpdate(); + self.engine.endUpdate(); var nestedGrids = o.find('.grid-stack'); if (nestedGrids.length && event.type === 'resizestop') { nestedGrids.each(function(index, el) { - $(el).data('gridstack').onResizeHandler(); + el.gridstack.onResizeHandler(); }); o.find('.grid-stack-item').trigger('resizestop'); o.find('.grid-stack-item').trigger('gsresizestop'); } if (event.type === 'resizestop') { - self.container.trigger('gsresizestop', o); + self.$el.trigger('gsresizestop', o); } }; @@ -1397,8 +1405,8 @@ el = $(el); el.addClass(this.opts.itemClass); - var node = this._readAttr(el, {el: el, _grid: self}); - node = self.grid.addNode(node, triggerAddEvent); + var node = this._readAttr(el, {el: el.get(0), _grid: self}); + node = self.engine.addNode(node, triggerAddEvent); el.data('_gridstack_node', node); this._prepareElementsByNode(el, node); @@ -1448,29 +1456,29 @@ GridStack.prototype.setAnimation = function(enable) { if (enable) { - this.container.addClass('grid-stack-animate'); + this.$el.addClass('grid-stack-animate'); } else { - this.container.removeClass('grid-stack-animate'); + this.$el.removeClass('grid-stack-animate'); } }; - GridStack.prototype.addWidget = function(el, node, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id) { + GridStack.prototype.addWidget = function(el, opt, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id) { // new way of calling with an object - make sure all items have been properly initialized - if (node === undefined || typeof node === 'object') { - // Tempting to initialize the passed in node with default and valid values, but this break knockout demos + if (opt === undefined || typeof opt === 'object') { + // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. - // node = this.grid._prepareNode(node); - node = node || {}; + // opt = this.engine._prepareNode(opt); + opt = opt || {}; } else { // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) - return this.addWidget(el, {x: node, y: y, width: width, height: height, autoPosition: autoPosition, + return this.addWidget(el, {x: opt, y: y, width: width, height: height, autoPosition: autoPosition, minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id}); } el = $(el); - this._writeAttr(el, node); - this.container.append(el); + this._writeAttr(el, opt); + this.$el.append(el); return this.makeWidget(el); }; @@ -1481,12 +1489,12 @@ this._triggerAddEvent(); this._triggerChangeEvent(true); // trigger any other changes - return el; + return el.get(0); }; GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) { var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; - return this.grid.canBePlacedWithRespectToHeight(node); + return this.engine.canBePlacedWithRespectToHeight(node); }; GridStack.prototype.removeWidget = function(el, detachNode) { @@ -1495,11 +1503,11 @@ var node = el.data('_gridstack_node'); // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 if (!node) { - node = this.grid.getNodeDataByDOMEl(el); + node = this.engine.getNodeDataByDOMEl(el.get(0)); } el.removeData('_gridstack_node'); - this.grid.removeNode(node, detachNode); + this.engine.removeNode(node, detachNode); this._triggerRemoveEvent(); this._triggerChangeEvent(true); // trigger any other changes }; @@ -1507,9 +1515,9 @@ GridStack.prototype.removeAll = function(detachNode) { if (detachNode !== false) { // remove our data structure before list gets emptied and DOM elements stay behind - this.grid.nodes.forEach(function(node) { node.el.removeData('_gridstack_node') }); + this.engine.nodes.forEach(function(node) { $(node.el).removeData('_gridstack_node') }); } - this.grid.removeAll(detachNode); + this.engine.removeAll(detachNode); this._triggerRemoveEvent(); }; @@ -1518,13 +1526,13 @@ this.disable(); if (detachGrid !== undefined && !detachGrid) { this.removeAll(false); - this.container.removeData('gridstack'); + delete this.$el.get(0).gridstack; } else { - this.container.remove(); + this.$el.remove(); } Utils.removeStylesheet(this._stylesId); - if (this.grid) { - this.grid = null; + if (this.engine) { + this.engine = null; } }; @@ -1565,29 +1573,29 @@ }; GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) { - this.movable(this.container.children('.' + this.opts.itemClass), doEnable); + this.movable(this.$el.children('.' + this.opts.itemClass), doEnable); if (includeNewWidgets) { this.opts.disableDrag = !doEnable; } }; GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) { - this.resizable(this.container.children('.' + this.opts.itemClass), doEnable); + this.resizable(this.$el.children('.' + this.opts.itemClass), doEnable); if (includeNewWidgets) { this.opts.disableResize = !doEnable; } }; GridStack.prototype.disable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), false); - this.resizable(this.container.children('.' + this.opts.itemClass), false); - this.container.trigger('disable'); + this.movable(this.$el.children('.' + this.opts.itemClass), false); + this.resizable(this.$el.children('.' + this.opts.itemClass), false); + this.$el.trigger('disable'); }; GridStack.prototype.enable = function() { - this.movable(this.container.children('.' + this.opts.itemClass), true); - this.resizable(this.container.children('.' + this.opts.itemClass), true); - this.container.trigger('enable'); + this.movable(this.$el.children('.' + this.opts.itemClass), true); + this.resizable(this.$el.children('.' + this.opts.itemClass), true); + this.$el.trigger('enable'); }; GridStack.prototype.locked = function(el, val) { @@ -1664,15 +1672,15 @@ if (!node) { return; } var self = this; - self.grid.cleanNodes(); - self.grid.beginUpdate(node); + self.engine.cleanNodes(); + self.engine.beginUpdate(node); callback.call(this, el, node); self._updateContainerHeight(); self._triggerChangeEvent(); - self.grid.endUpdate(); + self.engine.endUpdate(); }; GridStack.prototype.resize = function(el, width, height) { @@ -1680,7 +1688,7 @@ width = (width !== null && width !== undefined) ? width : node.width; height = (height !== null && height !== undefined) ? height : node.height; - this.grid.moveNode(node, node.x, node.y, width, height); + this.engine.moveNode(node, node.x, node.y, width, height); }); }; @@ -1689,7 +1697,7 @@ x = (x !== null && x !== undefined) ? x : node.x; y = (y !== null && y !== undefined) ? y : node.y; - this.grid.moveNode(node, x, y, node.width, node.height); + this.engine.moveNode(node, x, y, node.width, node.height); }); }; @@ -1700,7 +1708,7 @@ width = (width !== null && width !== undefined) ? width : node.width; height = (height !== null && height !== undefined) ? height : node.height; - this.grid.moveNode(node, x, y, width, height); + this.engine.moveNode(node, x, y, width, height); }); }; @@ -1708,16 +1716,16 @@ * relayout grid items to reclaim any empty space */ GridStack.prototype.compact = function() { - if (this.grid.nodes.length === 0) { return; } + if (this.engine.nodes.length === 0) { return; } this.batchUpdate(); - this.grid._sortNodes(); - var nodes = this.grid.nodes; - this.grid.nodes = []; // pretend we have no nodes to conflict layout to start with... + this.engine._sortNodes(); + var nodes = this.engine.nodes; + this.engine.nodes = []; // pretend we have no nodes to conflict layout to start with... nodes.forEach(function(node) { if (!node.noMove && !node.locked) { node.autoPosition = true; } - this.grid.addNode(node, false); // 'false' for add event trigger... + this.engine.addNode(node, false); // 'false' for add event trigger node._dirty = true; // force attr update }, this); this.commit(); @@ -1749,7 +1757,7 @@ return this.opts.cellHeight; } // compute the height taking margin into account (each row has margin other than last one) - var o = this.container.children('.' + this.opts.itemClass).first(); + var o = this.$el.children('.' + this.opts.itemClass).first(); var height = o.attr('data-gs-height'); var verticalMargin = this.opts.verticalMargin; return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); @@ -1770,34 +1778,34 @@ GridStack.prototype.cellWidth = function() { // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) - return Math.round(this.container.outerWidth() / this.opts.column); + return Math.round(this.$el.outerWidth() / this.opts.column); }; GridStack.prototype.getCellFromPixel = function(position, useOffset) { var containerPos = (useOffset !== undefined && useOffset) ? - this.container.offset() : this.container.position(); + this.$el.offset() : this.$el.position(); var relativeLeft = position.left - containerPos.left; var relativeTop = position.top - containerPos.top; - var columnWidth = Math.floor(this.container.width() / this.opts.column); - var rowHeight = Math.floor(this.container.height() / parseInt(this.container.attr('data-gs-current-height'))); + var columnWidth = Math.floor(this.$el.width() / this.opts.column); + var rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row'))); return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; }; GridStack.prototype.batchUpdate = function() { - this.grid.batchUpdate(); + this.engine.batchUpdate(); }; GridStack.prototype.commit = function() { - this.grid.commit(); + this.engine.commit(); this._triggerRemoveEvent(); this._triggerAddEvent(); this._triggerChangeEvent(); }; GridStack.prototype.isAreaEmpty = function(x, y, width, height) { - return this.grid.isAreaEmpty(x, y, width, height); + return this.engine.isAreaEmpty(x, y, width, height); }; GridStack.prototype.setStatic = function(staticValue) { @@ -1811,9 +1819,9 @@ var staticClassName = 'grid-stack-static'; if (this.opts.staticGrid === true) { - this.container.addClass(staticClassName); + this.$el.addClass(staticClassName); } else { - this.container.removeClass(staticClassName); + this.$el.removeClass(staticClassName); } }; @@ -1952,13 +1960,18 @@ } /** - * Modify number of columns in the grid. Will attempt to update existing widgets - * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], + * set/get number of columns in the grid. Will attempt to update existing widgets + * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [2-11], * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) * @param column - Integer > 0 (default 12). * @param doNotPropagate if true existing widgets will not be updated (optional) */ - GridStack.prototype.setColumn = function(column, doNotPropagate) { + GridStack.prototype.column = function(column, doNotPropagate) { + // getter - returns the opts stored mode + if (column === undefined) { + return this.opts.column; + } + // setter if (this.opts.column === column) { return; } var oldColumn = this.opts.column; @@ -1970,9 +1983,9 @@ delete this._prevColumn; } - this.container.removeClass('grid-stack-' + oldColumn); - this.container.addClass('grid-stack-' + column); - this.opts.column = this.grid.column = column; + this.$el.removeClass('grid-stack-' + oldColumn); + this.$el.addClass('grid-stack-' + column); + this.opts.column = this.engine.column = column; if (doNotPropagate === true) { return; } @@ -1980,18 +1993,18 @@ var domNodes; if (this.opts.oneColumnModeDomSort && column === 1) { domNodes = []; - this.container.children('.' + this.opts.itemClass).each(function(index, el) { + this.$el.children('.' + this.opts.itemClass).each(function(index, el) { var node = $(el).data('_gridstack_node'); if (node) { domNodes.push(node); } }); if (!domNodes.length) { domNodes = undefined; } } - this.grid._updateNodeWidths(oldColumn, column, domNodes); + this.engine._updateNodeWidths(oldColumn, column, domNodes); // and trigger our event last... - this.grid._ignoreLayoutsNodeChange = true; + this.engine._ignoreLayoutsNodeChange = true; this._triggerChangeEvent(); - delete this.grid._ignoreLayoutsNodeChange; + delete this.engine._ignoreLayoutsNodeChange; }; GridStack.prototype.float = function(val) { @@ -2001,33 +2014,85 @@ } // setter - updates the mode and relayout if gravity is back on if (this.opts.float === val) { return; } - this.opts.float = this.grid.float = val || false; + this.opts.float = this.engine.float = val || false; if (!val) { - this.grid._packNodes(); - this.grid._notify(); + this.engine._packNodes(); + this.engine._notify(); this._triggerChangeEvent(); } }; + GridStack.prototype.getRow = function() { + return this.engine.getRow(); + } + + /** Event handler that extracts our CustomEvent data out automatically for receiving custom + * notifications (see doc for supported events) + */ + GridStack.prototype.on = function(eventName, callback) { + if (eventName === 'change' || eventName === 'added' || eventName === 'removed') { + // native CustomEvent handlers - cash the generic handlers so we can remove + this._gsEventHandler = this._gsEventHandler || {}; + this._gsEventHandler[eventName] = function(event) { callback(event, event.detail) }; + this.el.addEventListener(eventName, this._gsEventHandler[eventName]); + } else { + // still JQuery events + this.$el.on(eventName, callback); + } + } + + /** unsubscribe from the 'on' event */ + GridStack.prototype.off = function(eventName) { + if (eventName === 'change' || eventName === 'added' || eventName === 'removed') { + // remove native CustomEvent handlers + if (this._gsEventHandler && this._gsEventHandler[eventName]) { + this.el.removeEventListener(eventName, this._gsEventHandler[eventName]); + delete this._gsEventHandler[eventName]; + } + } else { + // still JQuery events + this.$el.off(eventName); + } + } + // legacy method renames - GridStack.prototype.setGridWidth = obsolete(GridStack.prototype.setColumn, - 'setGridWidth', 'setColumn', 'v0.5.3'); + GridStack.prototype.setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); + GridStack.prototype.setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); + GridStackEngine.prototype.getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); - scope.GridStackUI = GridStack; + scope.GridStack = GridStack; + scope.GridStack.Utils = Utils; + scope.GridStack.Engine = GridStackEngine; + scope.GridStack.DragDropPlugin = GridStackDragDropPlugin; - scope.GridStackUI.Utils = Utils; - scope.GridStackUI.Engine = GridStackEngine; - scope.GridStackUI.GridStackDragDropPlugin = GridStackDragDropPlugin; + /** + * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will + * simply return the existing instance (ignore any passed options). + */ + GridStack.init = function(opts, elOrString) { + if (!elOrString) { elOrString = '.grid-stack' } + var el = $(elOrString).get(0); + if (!el) return; + if (!el.gridstack) { + el.gridstack = new GridStack(el, opts); + } + return el.gridstack + }; - $.fn.gridstack = function(opts) { - return this.each(function() { - var o = $(this); - if (!o.data('gridstack')) { - o - .data('gridstack', new GridStack(this, opts)); + /** + * Will initialize a list of elements (given a selector) and return an array of grids. + */ + GridStack.initAll = function(opts, selector) { + if (!selector) { selector = '.grid-stack' } + var grids = []; + $(selector).each(function(index, el) { + if (!el.gridstack) { + el.gridstack = new GridStack(el, opts); } + grids.push(el.gridstack); }); + return grids; }; - return scope.GridStackUI; + return scope.GridStack; }); diff --git a/src/gridstack.scss b/src/gridstack.scss index 7d5ae3364..a6669b539 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 0.6.4-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 1.0.0 CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/jquery-ui.js b/src/jquery-ui.js index d6e1192f6..68b416b22 100644 --- a/src/jquery-ui.js +++ b/src/jquery-ui.js @@ -4,11 +4,12 @@ * Copyright jQuery Foundation and other contributors; Licensed MIT @preserve*/ (function( factory ) { + /* [alain] we compile this in so no need to load with AMD if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery" ], factory ); - } else { + } else */{ // Browser globals factory( jQuery ); diff --git a/src/jquery.js b/src/jquery.js new file mode 100644 index 000000000..638fceb98 --- /dev/null +++ b/src/jquery.js @@ -0,0 +1,10598 @@ +/*! + * jQuery JavaScript Library v3.4.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2019-05-01T21:04Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.4.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +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; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + 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 ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // 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( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code, options ) { + DOMEval( code, { nonce: options && options.nonce } ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.4 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2019-04-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) && + + // Support: IE 8 only + // Exclude object elements + (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && rdescend.test( selector ) ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = (elem.ownerDocument || elem).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ 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 = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( typeof elem.contentDocument !== "undefined" ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * 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( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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 !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // 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, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // 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.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + } ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + // Support: IE 9-11 only + // Also use offsetWidth/offsetHeight for when box sizing is unreliable + // We use getClientRects() to check for hidden/disconnected. + // In those cases, the computed value can be trusted to be border-box + if ( ( !support.boxSizingReliable() && isBorderBox || + val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url, options ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + ``` if you need to debug, look at the git demo/ examples for non min includes. diff --git a/doc/CHANGES.md b/doc/CHANGES.md index c953aa3c6..47fe2329f 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [1.0.0-dev (upcoming)](#100-dev-upcoming) +- [1.1.0-dev (upcoming)](#110-dev-upcoming) +- [1.1.0 (2020-02-29)](#110-2020-02-29) - [v1.0.0 (2020-02-23)](#v100-2020-02-23) - [v0.6.4 (2020-02-17)](#v064-2020-02-17) - [v0.6.3 (2020-02-05)](#v063-2020-02-05) @@ -31,7 +32,11 @@ Change log -## 1.0.0-dev (upcoming) +## 1.1.0-dev (upcoming) + +- TBD + +## 1.1.0 (2020-02-29) - add `minRow` and `row` grid options (which set minRow=maxRow=N) [1172](https://github.com/gridstack/gridstack.js/issues/1172) - thanks [@RadoiAndrei](https://github.com/RadoiAndrei) - fix [1166](https://github.com/gridstack/gridstack.js/issues/1166) resize not taking margin height into account - thanks [@awjae](https://github.com/awjae) diff --git a/package.json b/package.json index 202644952..cfadefcc4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "1.0.0-dev", + "version": "1.1.0-dev", "description": "JavaScript / TypeScript for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "dist/gridstack", "repository": { diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 3373d5a28..31c094037 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 1.0.0-dev extra CSS for [2-11] columns (non default) + * gridstack 1.1.0-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 09d0a8f17..3f69a3a92 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.0.0-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 1.1.0-dev - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 06dfde859..1ddfc0e1b 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 1.0.0-dev +// Type definitions for Gridstack 1.1.0-dev // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index b0e44659a..0c5c95fb2 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.0.0-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 1.1.0-dev - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 649a2e4f6..a59ce77c9 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 1.0.0-dev + * gridstack.js 1.1.0-dev * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 7a90a16fb..07be076d0 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 1.0.0-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 1.1.0-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From 6d12c546a16e409981913074fda62e60c22f2c19 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 29 Feb 2020 11:27:17 -0800 Subject: [PATCH 0165/1298] minRow doc update --- src/gridstack.d.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 1ddfc0e1b..337c8855c 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -569,6 +569,12 @@ interface GridstackOptions { */ maxRow ? : number; + /** + * minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute + * on the grid div in pixels, which will round to the closest row. + */ + minRow?: number; + /** * minimal width. If window width is less, grid will be shown in one column mode (default?: 768) */ @@ -605,6 +611,12 @@ interface GridstackOptions { */ removeTimeout ? : number; + /** + * fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. + * (default `0` no constrain) + */ + row?: number; + /** * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto') * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html) From 989d92ec8ec4bdea625133c66fe5752f916aee2e Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 4 Mar 2020 19:53:30 -0800 Subject: [PATCH 0166/1298] Add polyfill for CustomEvent to fix #1186 (#1187) * Add polyfill for CustomEvent to fix #1186 --- src/gridstack-poly.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 3f69a3a92..5ec62d795 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -5,6 +5,22 @@ * gridstack.js may be freely distributed under the MIT license. */ +// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent +(function () { + if (typeof window.CustomEvent === "function") { + return false; + } + + function CustomEvent (event, params) { + params = params || {bubbles: false, cancelable: false, detail: null}; + var evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + } + + window.CustomEvent = CustomEvent; +})(); + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN Number.isNaN = Number.isNaN || function isNaN(input) { return typeof input === 'number' && input !== input; From 6daf797d427efbee675130aa7a365f223ef30f34 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 4 Mar 2020 20:00:43 -0800 Subject: [PATCH 0167/1298] updated change.md --- doc/CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 47fe2329f..7ceec863a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -34,7 +34,7 @@ Change log ## 1.1.0-dev (upcoming) -- TBD +- fix [1187](https://github.com/gridstack/gridstack.js/issues/1187) IE support for `CustomEvent` polyfill - thanks [@phil-blais](https://github.com/phil-blais) ## 1.1.0 (2020-02-29) From 6b35b7e0bd407af437fdbb1691d6ee4c214cb9f5 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 5 Mar 2020 18:06:39 -0800 Subject: [PATCH 0168/1298] better doc for jquery conflict document for #1191 --- README.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0c69b858a..5ad6f8add 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ Join us on Slack: https://gridstackjs.troolee.com - [Custom columns CSS](#custom-columns-css) - [Override resizable/draggable options](#override-resizabledraggable-options) - [Touch devices support](#touch-devices-support) + - [Migrating to v0.6.x](#migrating-to-v06x) - [Migrating to v1.0.0](#migrating-to-v100) - [Changes](#changes) - [The Team](#the-team) @@ -258,11 +259,15 @@ GridStack.init(options); If you're still experiencing issues on touch devices please check [#444](https://github.com/gridstack/gridstack.js/issues/444) +## Migrating to v0.6.x + +starting in 0.6.x `change` event are no longer sent (for pretty much most nodes!) when an item is just added/deleted unless it also changes other nodes (was incorrect and causing inefficiencies). You may need to track `added|removed` [events](https://github.com/gridstack/gridstack.js/tree/develop/doc#events) if you didn't and relied on the old broken behavior. + ## Migrating to v1.0.0 v1.0.0 removed Jquery from the API and external dependencies, which will require some code changes. Here is a list of the changes: -1. your code only needs to include `gridstack.all.js` and `gristack.css` (don't include other) and is recommended you do that as internal dependencies will change. Right now jquery+jquery-ui (trimmed versions) are still being used internally for a short while. +1. your code only needs to include `gridstack.all.js` and `gristack.css` (don't include other JS) and is recommended you do that as internal dependencies will change over time. If you are jquery based, also see note below. 2. code change: @@ -273,7 +278,7 @@ $('.grid-stack').gridstack(opts?); var grid = $('.grid-stack').data('gridstack'); // returned Jquery element -grid.addWidget($('
    test
    '), {width: 2}); +grid.addWidget($('
    test
    '), undefined, undefined, 2, undefined, true); // jquery event handler $('.grid-stack').on('added', function(e, items) {/* items contains info */}); @@ -292,8 +297,9 @@ grid.addWidget('
    test
    ', { grid.on('added', function(e, items) {/* items contains info */}); ``` + 3. see [Migrating to v0.6.x](#migrating-to-v06x) if you didn't already -Other vars/global changes +Other vars/global changes ``` `GridStackUI` --> `GridStack` `GridStackUI.GridStackEngine` --> `GridStack.Engine` @@ -304,7 +310,9 @@ Other vars/global changes Recommend looking at the [many samples](./demo) for more code examples. -We're working on implementing support for other drag'n'drop libraries through the plugin system. Right now it is still jquery-ui based (but minimal build content) +**NOTE: jQuery Applications** + +We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.4.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring it's own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` + after you import your libs. Changes ===== From 02da5ad425152996996eefd368743a7245d376f1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 5 Mar 2020 22:23:56 -0800 Subject: [PATCH 0169/1298] include SASS src files to npm pack * including the source SASS files for the package (like before) as some app/lib might use it to generate extra column layouts 8 updated README with sample code * see https://github.com/node-red/node-red-dashboard/issues/569 --- Gruntfile.js | 2 ++ README.md | 11 ++++++++++- doc/CHANGES.md | 1 + src/gridstack-extra.scss | 4 +++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 144d25ea2..cfb546341 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -48,6 +48,8 @@ module.exports = function(grunt) { 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], 'dist/jquery.js': ['src/jquery.js'], 'dist/jquery-ui.js': ['src/jquery-ui.js'], + 'dist/src/gridstack.scss': ['src/gridstack.scss'], + 'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'], } } }, diff --git a/README.md b/README.md index 5ad6f8add..a8df5ad0e 100644 --- a/README.md +++ b/README.md @@ -219,9 +219,18 @@ Better yet, here is a SASS code snippet which can make life much easier (Thanks } ``` -you can also look at the SASS [src/gridstack-extra.scss](https://github.com/gridstack/gridstack.js/blob/develop/src/gridstack-extra.scss) and modify to add more columns +you can also use the SASS [src/gridstack-extra.scss](https://github.com/gridstack/gridstack.js/blob/develop/src/gridstack-extra.scss) included in NPM package and modify to add more columns and also have the `.grid-stack-N` prefix to support letting the user change columns dynamically. +Sample gulp command for 30 columns: +```js +gulp.src('node_modules/gridstack/dist/src/gridstack-extra.scss') + .pipe(replace('$gridstack-columns: 11 !default;','$gridstack-columns: 30;')) + .pipe(sass({outputStyle: 'compressed'})) + .pipe(rename({extname: '.min.css'})) + .pipe(gulp.dest('dist/css')) +``` + ## Override resizable/draggable options You can override default `resizable`/`draggable` options. For instance to enable other then bottom right resizing handle diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 7ceec863a..7a32d435b 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -35,6 +35,7 @@ Change log ## 1.1.0-dev (upcoming) - fix [1187](https://github.com/gridstack/gridstack.js/issues/1187) IE support for `CustomEvent` polyfill - thanks [@phil-blais](https://github.com/phil-blais) +- include SASS source files to npm package again [1193](https://github.com/gridstack/gridstack.js/pull/1193) ## 1.1.0 (2020-02-29) diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 31c094037..5725e4475 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -5,7 +5,9 @@ * gridstack.js may be freely distributed under the MIT license. */ +// default to generate [2-11] columns as 1 (oneColumnMode) and 12 (default) are in the main css $gridstack-columns: 11 !default; +$gridstack-columns-start: 2 !default; @mixin grid-stack-items($columns) { .grid-stack.grid-stack-#{$columns} { @@ -23,6 +25,6 @@ $gridstack-columns: 11 !default; } } -@for $j from 2 through $gridstack-columns { +@for $j from $gridstack-columns-start through $gridstack-columns { @include grid-stack-items($j) } From 2fd2cce7f236f07ac40a15d83d70e3cc8b887b52 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 8 Mar 2020 09:07:24 -0700 Subject: [PATCH 0170/1298] updated doc --- .vscode/settings.json | 18 ++++++++++++++ doc/README.md | 58 ++++++++++++++++++++++++------------------- 2 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..4e9faea3d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "cSpell.words": [ + "Pavel", + "Reznikov", + "doctoc", + "drag'n'drop", + "dragdrop", + "draggable", + "dragstart", + "dragstop", + "dropover", + "droppable", + "gsresize", + "gsresizestop", + "jqueryui", + "resizestart" + ] +} \ No newline at end of file diff --git a/doc/README.md b/doc/README.md index 493e998e4..68ec69085 100644 --- a/doc/README.md +++ b/doc/README.md @@ -5,8 +5,9 @@ gridstack.js API **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [Options](#options) +- [Grid Options](#grid-options) - [Grid attributes](#grid-attributes) +- [Item Options](#item-options) - [Item attributes](#item-attributes) - [Events](#events) - [added(event, items)](#addedevent-items) @@ -60,23 +61,26 @@ gridstack.js API -## Options +## Grid Options - `acceptWidgets` - accept widgets dragged from other grids or from outside (default: `false`). Can be: * `true` (uses `'.grid-stack-item'` class filter) or `false` * string for explicit class name - * function (i: number, element: Element) returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html) -- `alwaysShowResizeHandle` - if `true` the resizing handles are shown even if the user is not hovering over the widget - (default: `false`) + * `function (i: number, element: Element): boolean` See [example](http://gridstack.github.io/gridstack.js/demo/two.html) +- `alwaysShowResizeHandle` - possible values (default: `false` only show on hover) + * `true` the resizing handles are always shown even if the user is not hovering over the widget + * advance condition such as this mobile browser agent check: + `alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test( navigator.userAgent )` + See [example](http://gridstack.github.io/gridstack.js/demo/advance.html) - `animate` - turns animation on (default: `false`) - `auto` - if `false` gridstack will not initialize existing items (default: `true`) - `cellHeight` - one cell height (default: `60`). Can be: * an integer (px) * a string (ex: '100px', '10em', '10rem', '10%') * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files. - * `'auto'` - height will be calculated to match cell width (initial square grid). + * `'auto'` - height will be calculated cell square initially. - `column` - number of columns (default: `12`) which can change on the fly with `column(N)` as well. See [example](http://gridstackjs.com/demo/column.html) -- `ddPlugin` - class that implement drag'n'drop functionallity for gridstack. If `false` grid will be static. (default: `null` - first available plugin will be used) +- `ddPlugin` - class that implement drag'n'drop functionality for gridstack. If `false` grid will be static. (default: `null` - first available plugin will be used) - `disableDrag` - disallows dragging of widgets (default: `false`). - `disableOneColumnMode` - disables the onColumnMode when the window width is less than minWidth (default: 'false') - `disableResize` - disallows resizing of widgets (default: `false`). @@ -87,7 +91,7 @@ gridstack.js API - `handleClass` - draggable handle class (e.g. `'grid-stack-item-content'`). If set `handle` is ignored (default: `null`) - `itemClass` - widget class (default: `'grid-stack-item'`) - `maxRow` - maximum rows amount. Default is `0` which means no max. -- `minRow` - minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute on the grid div in pixels, which will round to the closest row. +- `minRow` - minimum rows amount which is handy to prevent grid from collapsing when empty. Default is `0`. You can also do this with `min-height` CSS attribute on the grid div in pixels, which will round to the closest row. - `minWidth` - minimal width. If window width is less than or equal to, grid will be shown in one-column mode (default: `768`) - `oneColumnModeDomSort` - set to `true` if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: `false`) - `placeholderClass` - class for placeholder (default: `'grid-stack-placeholder'`) @@ -104,26 +108,30 @@ gridstack.js API ## Grid attributes -- `data-gs-animate` - turns animation on -- `data-gs-column` - amount of columns. Setting non-default value must be supported by equivalent change in CSS, [see docs here](https://github.com/gridstack/gridstack.js#change-grid-columns). +most of the above options are also available as HTML attributes using the `data-gs-` name prefix with standard dash lower case naming convention (ex: `data-gs-column`, `data-gs-min-row`, etc..). + +Extras: - `data-gs-current-row` - (internal) current rows amount. Set by the library only. Can be used by the CSS rules. -- `data-gs-max-row` - maximum rows amount. Default is `0` which means no max. -- `data-gs-min-row` - minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute on the grid div in pixels, which will round to the closest row. -- `data-gs-row` - fix grid number of rows. This is a shortcut of writing `data-gs-min-row="N" data-gs-max-row="N"`. (default `0` no constrain) + +## Item Options + +options you can pass when calling `addWidget()` + +- `autoPosition` - tells to ignore `x` and `y` attributes and to place element to the first available position. Having either one missing will also do that. +- `x`, `y` - (number) element position in row/column. Note: if one is missing this will `autoPosition` the item +- `width`, `height` - (number) element size in row/column (default 1x1) +- `maxWidth`, `minWidth`, `maxHeight`, `minHeight` - element constraints in row/column (default none) +- `locked` - means another widget wouldn't be able to move it during dragging or resizing. +The widget can still be dragged or resized by the user. +You need to add `noResize` and `noMove` attributes to completely lock the widget. +- `noResize` - disable element resizing +- `noMove` - disable element moving +- `resizeHandles` - sets resize handles for a specific widget. +- `id`- (number | string) good for quick identification (for example in change event) ## Item attributes -- `data-gs-x`, `data-gs-y` - (number) element position in row/column. Note: if one is missing this will `autoPosition` the item -- `data-gs-width`, `data-gs-height` - (number) element size in row/column -- `data-gs-id`- (number | string) good for quick identification (for example in change event) -- `data-gs-max-width`, `data-gs-min-width`, `data-gs-max-height`, `data-gs-min-height` - element constraints in row/column -- `data-gs-no-resize` - disable element resizing -- `data-gs-no-move` - disable element moving -- `data-gs-auto-position` - tells to ignore `data-gs-x` and `data-gs-y` attributes and to place element to the first available position. Having either one missing will also do that. -- `data-gs-locked` - the widget will be locked. It means another widget wouldn't be able to move it during dragging or resizing. -The widget can still be dragged or resized. You need to add `data-gs-no-resize` and `data-gs-no-move` attributes -to completely lock the widget. -- `data-gs-resize-handles` - sets resize handles for a specific widget. +all item options are also available as HTML attributes using the `data-gs-` name prefix with standard dash lower case naming convention (ex: `data-gs-x`, `data-gs-min-width`, etc..). ## Events @@ -263,7 +271,7 @@ starts batch updates. You will see no changes until `commit()` method is called. ### compact() -relayout grid items to reclaim any empty space. +re-layout grid items to reclaim any empty space. ### cellHeight() From c3f39a738d29db8e6c164054a1fc3531d6bbc0ad Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 22 Feb 2020 18:32:59 -0800 Subject: [PATCH 0171/1298] Typescript conversion another BIG, BIG change * converted all code to Typescript * initial bundling with webpack to `gridstack.all.js` for browser inclusion * added index.ts to include all modules and dependencies for build * part-2 of gridstack #1084 TODO: * modified float.html to test new code. still not running (missing `GridStack` export) * need to use tsc to output for typescript native files ? --- .npmignore | 3 + Gruntfile.js | 24 +- demo/float.html | 3 + doc/README.md | 18 +- package.json | 26 +- src/gridstack-dragdrop-plugin.ts | 50 + src/gridstack-engine.ts | 593 ++++++ src/gridstack-extra.scss | 2 +- src/gridstack-poly.js | 5 +- src/gridstack.d.ts | 644 ------- src/gridstack.jQueryUI.js | 90 - src/gridstack.js | 2119 --------------------- src/gridstack.scss | 2 +- src/gridstack.ts | 1586 +++++++++++++++ src/index.ts | 13 + src/jquery-ui.js | 19 +- src/jqueryui-gridstack-dragdrop-plugin.ts | 91 + src/types.ts | 212 +++ src/utils.ts | 252 +++ tsconfig.json | 47 + webpack.config.js | 23 + yarn.lock | 1552 ++++++++++++++- 22 files changed, 4422 insertions(+), 2952 deletions(-) create mode 100644 src/gridstack-dragdrop-plugin.ts create mode 100644 src/gridstack-engine.ts delete mode 100644 src/gridstack.d.ts delete mode 100644 src/gridstack.jQueryUI.js delete mode 100644 src/gridstack.js create mode 100644 src/gridstack.ts create mode 100644 src/index.ts create mode 100644 src/jqueryui-gridstack-dragdrop-plugin.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.json create mode 100644 webpack.config.js diff --git a/.npmignore b/.npmignore index e6c85bd11..1536bd696 100644 --- a/.npmignore +++ b/.npmignore @@ -12,12 +12,15 @@ yarn.lock .npmignore .travis.yml .eslint* +.vscode Gruntfile.js ISSUE_TEMPLATE.md PULL_REQUEST_TEMPLATE.md freelancer karma.conf.js protractor.conf.js +tsconfig.json +webpack.config.js ## From .gitignore: *.log diff --git a/Gruntfile.js b/Gruntfile.js index cfb546341..4c56e9c3b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -25,10 +25,10 @@ module.exports = function(grunt) { } } }, - cssmin: { dist: { options: { + sourceMap: false, keepSpecialComments: '*' }, files: { @@ -37,23 +37,21 @@ module.exports = function(grunt) { } } }, - copy: { dist: { files: { - 'dist/gridstack.js': ['src/gridstack.js'], - 'dist/gridstack.d.ts': ['src/gridstack.d.ts'], - 'dist/gridstack.all.d.ts': ['src/gridstack.d.ts'], - 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'], +/* 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], 'dist/jquery.js': ['src/jquery.js'], 'dist/jquery-ui.js': ['src/jquery-ui.js'], 'dist/src/gridstack.scss': ['src/gridstack.scss'], 'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'], +*/ } } }, + /* uglify: { options: { sourceMap: true, @@ -64,15 +62,13 @@ module.exports = function(grunt) { }, dist: { files: { - 'dist/gridstack.min.js': ['src/gridstack.js'], - 'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'], - 'dist/gridstack-poly.min.js': ['src/gridstack-poly.js'], - 'dist/jquery.min.js': ['src/jquery.js'], - 'dist/jquery-ui.min.js': ['src/jquery-ui.js'], - 'dist/gridstack.all.js': ['src/gridstack-poly.js', 'src/jquery.js', 'src/gridstack.js', 'src/jquery-ui.js', 'src/gridstack.jQueryUI.js'] + //'dist/gridstack-poly.min.js': 'src/gridstack-poly.js', + //'dist/jquery.min.js': 'src/jquery.js', + //'dist/jquery-ui.min.js': 'src/jquery-ui.js' } } }, + */ eslint: { target: ['*.js', 'src/*.js'] @@ -87,7 +83,7 @@ module.exports = function(grunt) { }, styles: { files: ['src/*.scss'], - tasks: ['sass', 'cssmin'], + tasks: ['sass'/*, 'cssmin'*/], options: { }, } @@ -120,7 +116,7 @@ module.exports = function(grunt) { }); grunt.registerTask('lint', ['eslint']); - grunt.registerTask('default', ['sass', 'cssmin', 'eslint', 'copy', 'uglify']); + grunt.registerTask('default', ['sass', 'cssmin', /*'eslint',*/ 'copy', /*'uglify'*/]); grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']); }; /*eslint-enable camelcase */ \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index dbc66085b..24629d493 100644 --- a/demo/float.html +++ b/demo/float.html @@ -7,10 +7,13 @@ Float grid demo + + diff --git a/doc/README.md b/doc/README.md index 68ec69085..417dcbc38 100644 --- a/doc/README.md +++ b/doc/README.md @@ -317,8 +317,8 @@ Parameters: Disables widgets moving/resizing. This is a shortcut for: ```js -grid.movable('.grid-stack-item', false); -grid.resizable('.grid-stack-item', false); +grid.enableMove(false); +grid.enableResize(false); ``` ### enable() @@ -326,24 +326,26 @@ grid.resizable('.grid-stack-item', false); Enables widgets moving/resizing. This is a shortcut for: ```js -grid.movable('.grid-stack-item', true); -grid.resizable('.grid-stack-item', true); +grid.enableMove(true); +grid.enableResize(true); ``` ### enableMove(doEnable, includeNewWidgets) -Enables/disables widget moving. `includeNewWidgets` will force new widgets to be draggable as per `doEnable`'s value by changing the `disableDrag` grid option. This is a shortcut for: +Enables/disables widget moving. `includeNewWidgets` will force new widgets to be draggable as per `doEnable`'s value by changing the `disableDrag` grid option (default: true). This is a shortcut for: ```js -grid.movable(this.container.children('.' + this.opts.itemClass), doEnable); +grid.movable('.grid-stack-item', doEnable); +grid.opts.disableDrag = !doEnable; ``` ### enableResize(doEnable, includeNewWidgets) -Enables/disables widget resizing. `includeNewWidgets` will force new widgets to be resizable as per `doEnable`'s value by changing the `disableResize` grid option. This is a shortcut for: +Enables/disables widget resizing. `includeNewWidgets` will force new widgets to be resizable as per `doEnable`'s value by changing the `disableResize` grid option (default: true). This is a shortcut for: ```js -grid.resizable(this.container.children('.' + this.opts.itemClass), doEnable); +grid.resizable('.grid-stack-item', doEnable); +grid.opts.disableResize = !doEnable; ``` ### float(val?) diff --git a/package.json b/package.json index cfadefcc4..e9cc5e73f 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,23 @@ { "name": "gridstack", - "version": "1.1.0-dev", - "description": "JavaScript / TypeScript for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", - "main": "dist/gridstack", + "version": "2.0.0-rc", + "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", "repository": { "type": "git", "url": "git+https://github.com/gridstack/gridstack.js.git" }, "scripts": { - "build": "grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", - "test": "grunt lint && karma start karma.conf.js", - "lint": "grunt lint", + "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "web": "rm -rf dist/* && webpack", + "test": "yarn lint && karma start karma.conf.js", + "lint": "tslint -p ./tsconfig.json", "reset": "rm -rf dist node_modules", "prepublishOnly": "yarn build" }, "keywords": [ - "JavaScript", + "Typescript", "gridstack.js", "grid", "gridster", @@ -27,7 +29,7 @@ "widgets", "Angular", "React", - "Typescript" + "JavaScript" ], "author": "Pavel Reznikov ", "contributors": [ @@ -41,6 +43,8 @@ "homepage": "http://gridstack.github.io/gridstack.js/", "dependencies": {}, "devDependencies": { + "@types/jquery": "^3.3.32", + "@types/jqueryui": "^1.12.10", "connect": "^3.7.0", "core-js": "^3.6.4", "coveralls": "^3.0.9", @@ -64,7 +68,11 @@ "karma-jasmine": "^3.1.1", "node-sass": "^4.13.1", "puppeteer": "^2.1.1", - "serve-static": "^1.14.1" + "serve-static": "^1.14.1", + "ts-loader": "^6.2.1", + "typescript": "3.4.5", + "webpack": "^4.42.0", + "webpack-cli": "^3.3.11" }, "resolutions": { "lodash": "^4.17.13", diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts new file mode 100644 index 000000000..a2107f364 --- /dev/null +++ b/src/gridstack-dragdrop-plugin.ts @@ -0,0 +1,50 @@ +// gridstack-dragdrop-plugin.ts 2.0.0-rc @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +import { GridStack } from './gridstack'; +import { GridStackElement } from './types'; + +/** drag&drop options currently called from the main code, but others can be passed in grid options */ +export type DDOpts = 'enable' | 'disable' | 'option' | {} | any; +export type DDKey = 'minWidth' | 'minHeight' | string; + +/** + * Base class for drag'n'drop plugin. + */ +export class GridStackDragDropPlugin { + protected grid: GridStack; + static registeredPlugins = []; + + static registerPlugin(pluginClass) { + GridStackDragDropPlugin.registeredPlugins.push(pluginClass); + }; + + public constructor(grid: GridStack) { + this.grid = grid; + } + + public resizable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + return this; + }; + + public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + return this; + }; + + public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + return this; + }; + + public isDroppable(el: GridStackElement): boolean { + return false; + }; + + public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin { + return this; + }; +} diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts new file mode 100644 index 000000000..82eec0586 --- /dev/null +++ b/src/gridstack-engine.ts @@ -0,0 +1,593 @@ +// gridstack-engine.ts 2.0.0-rc @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +import { Utils, obsolete } from './utils'; +import { GridStackNode } from './types'; + +export type onChangeCB = (nodes: GridStackNode[], detachNode?: boolean) => void; + +/** @internal class to store per column layout bare minimal info (subset of GridstackWidget) */ +interface layout { + x: number; + y: number; + width: number; + _id: number; // so we can find full node back +} + +/** + * Defines the GridStack engine that does most no DOM grid manipulation. + * See GridStack methods and vars for descriptions. + * + * NOTE: values should not be modified directly - call the main GridStack API instead + */ +export class GridStackEngine { + public column: number; + public maxRow: number; + public nodes: GridStackNode[]; + public onchange: onChangeCB; + public addedNodes: GridStackNode[] = []; + public removedNodes: GridStackNode[] = []; + public batchMode: boolean; + /** @internal */ + private _float: boolean; + /** @internal */ + private _prevFloat: boolean; + /** @internal */ + private _layouts?: layout[][]; // maps column # to array of values nodes + /** @internal */ + private _ignoreLayoutsNodeChange: boolean; + /** @internal */ + private static _idSeq = 1; + + public constructor(column?: number, onchange?: onChangeCB, float?: boolean, maxRow?: number, nodes?: GridStackNode[]) { + this.column = column || 12; + this._float = float || false; + this.maxRow = maxRow || 0; + this.nodes = nodes || []; + this.onchange = onchange || function () {}; + } + + public batchUpdate() { + if (this.batchMode) return; + this.batchMode = true; + this._prevFloat = this._float; + this._float = true; // let things go anywhere for now... commit() will restore and possibly reposition + }; + + public commit() { + if (!this.batchMode) return; + this.batchMode = false; + this._float = this._prevFloat; + delete this._prevFloat; + this._packNodes(); + this._notify(); + }; + + private _fixCollisions(node: GridStackNode) { + this._sortNodes(-1); + + let nn = node; + const hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); + if (!this.float && !hasLocked) { + nn = {x: 0, y: node.y, width: this.column, height: node.height}; + } + while (true) { + const array1 = [5, 12, 8, 130, 44]; + const found = array1.find(element => element > 10); + + const collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn}); + if (!collisionNode) { return; } + this.moveNode(collisionNode, collisionNode.x, node.y + node.height, + collisionNode.width, collisionNode.height, true); + } + }; + + public isAreaEmpty(x: number, y: number, width: number, height: number) { + const nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; + const collisionNode = this.nodes.find(function(n) { + return Utils.isIntercepted(n, nn); + }); + return !collisionNode; + }; + + /** re-layout grid items to reclaim any empty space */ + public compact() { + if (this.nodes.length === 0) { return; } + this.batchUpdate(); + this._sortNodes(); + const copyNodes = this.nodes; + this.nodes = []; // pretend we have no nodes to conflict layout to start with... + copyNodes.forEach(node => { + if (!node.noMove && !node.locked) { + node.autoPosition = true; + } + this.addNode(node, false); // 'false' for add event trigger + node._dirty = true; // force attr update + }); + this.commit(); + } + + /** + * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) + */ + public set float(val: boolean) { + if (this._float === val) { return; } + this._float = val || false; + if (!val) { + this._packNodes(); + this._notify(); + } + } + + // getter method + public get float(): boolean { return this._float; } + + private _sortNodes(dir?: number) { + this.nodes = Utils.sort(this.nodes, dir, this.column); + }; + + private _packNodes() { + this._sortNodes(); + + if (this.float) { + this.nodes.forEach((n, i) => { + if (n._updating || n._packY === undefined || n.y === n._packY) { + return; + } + let newY = n.y; + while (newY >= n._packY) { + const box = {x: n.x, y: newY, width: n.width, height: n.height}; + const collisionNode = this.nodes + .slice(0, i) + .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY}); + if (!collisionNode) { + n._dirty = true; + n.y = newY; + } + --newY; + } + }); + } else { + this.nodes.forEach((n, i) => { + if (n.locked) { return; } + while (n.y > 0) { + const newY = n.y - 1; + let canBeMoved = i === 0; + const box = {x: n.x, y: newY, width: n.width, height: n.height}; + if (i > 0) { + const collisionNode = this.nodes + .slice(0, i) + .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY}); + canBeMoved = collisionNode === undefined; + } + + if (!canBeMoved) { break; } + // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions + // and move items back. The user 'change' CB should detect changes from the original + // starting position instead. + n._dirty = (n.y !== newY); + n.y = newY; + } + }); + } + }; + + public _prepareNode(node: GridStackNode, resizing?: boolean) { + node = node || {}; + // if we're missing position, have the grid position us automatically (before we set them to 0,0) + if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) { + node.autoPosition = true; + } + + // assign defaults for missing required fields + const defaults = {width: 1, height: 1, x: 0, y: 0}; + node = Utils.defaults(node, defaults); + + // convert any strings over + /* TODO: check + node.x = parseInt(node.x); + node.y = parseInt(node.y); + node.width = parseInt(node.width); + node.height = parseInt(node.height); + */ + node.autoPosition = node.autoPosition || false; + node.noResize = node.noResize || false; + node.noMove = node.noMove || false; + + // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #) + if (Number.isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; } + if (Number.isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; } + if (Number.isNaN(node.width)) { node.width = defaults.width; } + if (Number.isNaN(node.height)) { node.height = defaults.height; } + + if (node.width > this.column) { + node.width = this.column; + } else if (node.width < 1) { + node.width = 1; + } + + if (node.height < 1) { + node.height = 1; + } + + if (node.x < 0) { + node.x = 0; + } + + if (node.x + node.width > this.column) { + if (resizing) { + node.width = this.column - node.x; + } else { + node.x = this.column - node.width; + } + } + + if (node.y < 0) { + node.y = 0; + } + + return node; + }; + + public getDirtyNodes(verify?: boolean) { + // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state + if (verify) { + const dirtNodes = []; + this.nodes.forEach(function (n) { + if (n._dirty) { + if (n.y === n._origY && n.x === n._origX && n.width === n._origW && n.height === n._origH) { + delete n._dirty; + } else { + dirtNodes.push(n); + } + } + }); + return dirtNodes; + } + + return this.nodes.filter(function(n) { return n._dirty; }); + }; + + private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean) { + if (this.batchMode) { return; } + detachNode = (detachNode === undefined ? true : detachNode); + nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) ); + const dirtyNodes = nodes.concat(this.getDirtyNodes()); + this.onchange(dirtyNodes, detachNode); + }; + + public cleanNodes() { + if (this.batchMode) { return; } + this.nodes.forEach(function(n) { delete n._dirty; }); + }; + + public addNode(node: GridStackNode, triggerAddEvent?: boolean) { + node = this._prepareNode(node); + + if (node.maxWidth !== undefined) { node.width = Math.min(node.width, node.maxWidth); } + if (node.maxHeight !== undefined) { node.height = Math.min(node.height, node.maxHeight); } + if (node.minWidth !== undefined) { node.width = Math.max(node.width, node.minWidth); } + if (node.minHeight !== undefined) { node.height = Math.max(node.height, node.minHeight); } + + node._id = node._id || GridStackEngine._idSeq++; + + if (node.autoPosition) { + this._sortNodes(); + + for (var i = 0;; ++i) { + const x = i % this.column; + const y = Math.floor(i / this.column); + if (x + node.width > this.column) { + continue; + } + const box = {x: x, y: y, width: node.width, height: node.height}; + if (!this.nodes.find(n => Utils.isIntercepted(box, n), {x: x, y: y, node: node})) { + node.x = x; + node.y = y; + delete node.autoPosition; // found our slot + break; + } + } + } + + this.nodes.push(node); + if (triggerAddEvent) { + this.addedNodes.push(node); + } + + this._fixCollisions(node); + this._packNodes(); + this._notify(); + return node; + }; + + public removeNode(node: GridStackNode, detachNode?: boolean) { + detachNode = (detachNode === undefined ? true : detachNode); + this.removedNodes.push(node); + node._id = null; // hint that node is being removed + this.nodes = Utils.without(this.nodes, node); + this._packNodes(); + this._notify(node, detachNode); + }; + + public removeAll(detachNode?: boolean) { + delete this._layouts; + if (this.nodes.length === 0) { return; } + detachNode = (detachNode === undefined ? true : detachNode); + this.nodes.forEach(function(n) { n._id = null; }); // hint that node is being removed + this.removedNodes = this.nodes; + this.nodes = []; + this._notify(this.removedNodes, detachNode); + }; + + public canMoveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number): boolean { + if (!this.isNodeChangedPosition(node, x, y, width, height)) { + return false; + } + const hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); + + if (!this.maxRow && !hasLocked) { + return true; + } + + let clonedNode; + const clone = new GridStackEngine( + this.column, + null, + this.float, + 0, + this.nodes.map(function(n) { + if (n === node) { + clonedNode = Utils.clone(n); + return clonedNode; + } + return Utils.clone(n); + })); + + if (!clonedNode) { return true;} + + clone.moveNode(clonedNode, x, y, width, height); + + let canMove = true; + if (hasLocked) { + canMove = canMove && !Boolean(clone.nodes.find(function(n) { + return n !== clonedNode && Boolean(n.locked) && Boolean(n._dirty); + })); + } + if (this.maxRow) { + canMove = canMove && (clone.getRow() <= this.maxRow); + } + + return canMove; + }; + + public canBePlacedWithRespectToHeight(node: GridStackNode) { + if (!this.maxRow) { + return true; + } + + const clone = new GridStackEngine( + this.column, + null, + this.float, + 0, + this.nodes.map(function(n) { return Utils.clone(n) })); + clone.addNode(node); + return clone.getRow() <= this.maxRow; + }; + + public isNodeChangedPosition(node: GridStackNode, x: number, y: number, width: number, height: number) { + if (typeof x !== 'number') { x = node.x; } + if (typeof y !== 'number') { y = node.y; } + if (typeof width !== 'number') { width = node.width; } + if (typeof height !== 'number') { height = node.height; } + + if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); } + if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); } + if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); } + if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); } + + if (node.x === x && node.y === y && node.width === width && node.height === height) { + return false; + } + return true; + }; + + public moveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number, noPack?: boolean): GridStackNode { + if (typeof x !== 'number') { x = node.x; } + if (typeof y !== 'number') { y = node.y; } + if (typeof width !== 'number') { width = node.width; } + if (typeof height !== 'number') { height = node.height; } + + if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); } + if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); } + if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); } + if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); } + + if (node.x === x && node.y === y && node.width === width && node.height === height) { + return node; + } + + const resizing = node.width !== width; + node._dirty = true; + + node.x = x; + node.y = y; + node.width = width; + node.height = height; + + node._lastTriedX = x; + node._lastTriedY = y; + node._lastTriedWidth = width; + node._lastTriedHeight = height; + + node = this._prepareNode(node, resizing); + + this._fixCollisions(node); + if (!noPack) { + this._packNodes(); + this._notify(); + } + return node; + }; + + public getRow(): number { + return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); + }; + + public beginUpdate(node: GridStackNode) { + if (node._updating) return; + node._updating = true; + this.nodes.forEach(function(n) { n._packY = n.y; }); + }; + + public endUpdate() { + const n = this.nodes.find(function(n) { return n._updating; }); + if (n) { + n._updating = false; + this.nodes.forEach(function(n) { delete n._packY; }); + } + }; + + /** called whenever a node is added or moved - updates the cached layouts */ + public _layoutsNodesChange(nodes: GridStackNode[]) { + if (!this._layouts || this._ignoreLayoutsNodeChange) return; + // remove smaller layouts - we will re-generate those on the fly... larger ones need to update + this._layouts.forEach(function(layout, column) { + if (!layout || column === this.column) return; + if (column < this.column) { + this._layouts[column] = undefined; + } + else { + // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better. + // Note: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. + nodes.forEach(function(node) { + const n = layout.find(function(l) { return l._id === node._id }); + if (!n) return; // no cache for new nodes. Will use those values. + const ratio = column / this.column; + // Y changed, push down same amount + // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode) + if (node.y !== node._origY) { + n.y += (node.y - node._origY); + } + // X changed, scale from new position + if (node.x !== node._origX) { + n.x = Math.round(node.x * ratio); + } + // width changed, scale from new width + if (node.width !== node._origW) { + n.width = Math.round(node.width * ratio); + } + // ...height always carries over from cache + }, this); + } + }, this); + } + + /** + * Called to scale the widget width & position up/down based on the column change. + * Note we store previous layouts (especially original ones) to make it possible to go + * from say 12 -> 1 -> 12 and get back to where we were. + * + * oldColumn: previous number of columns + * column: new column number + * nodes?: different sorted list (ex: DOM order) instead of current list + */ + public _updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[]) { + if (!this.nodes.length || oldColumn === column) { return; } + + // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data + const copy: layout[] = []; + this.nodes.forEach(function(n, i) { copy[i] = {x: n.x, y: n.y, width: n.width, _id: n._id} }); // only thing we change is x,y,w and id to find it back + this._layouts = this._layouts || []; // use array to find larger quick + this._layouts[oldColumn] = copy; + + // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout + if (column === 1 && nodes && nodes.length) { + let top = 0; + nodes.forEach(function(n) { + n.x = 0; + n.width = 1; + n.y = Math.max(n.y, top); + top = n.y + n.height; + }); + } else { + nodes = Utils.sort(this.nodes, -1, oldColumn); // current column reverse sorting so we can insert last to front (limit collision) + } + + // see if we have cached previous layout. + let cacheNodes = this._layouts[column] || []; + // if not AND we are going up in size start with the largest layout as down-scaling is more accurate + const lastIndex = this._layouts.length - 1; + if (cacheNodes.length === 0 && column > oldColumn && column < lastIndex) { + cacheNodes = this._layouts[lastIndex] || []; + if (cacheNodes.length) { + // pretend we came from that larger column by assigning those values as starting point + oldColumn = lastIndex; + cacheNodes.forEach(function(cacheNode) { + const j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id}); + if (j !== -1) { + // still current, use cache info positions + nodes[j].x = cacheNode.x; + nodes[j].y = cacheNode.y; + nodes[j].width = cacheNode.width; + } + }); + cacheNodes = []; // we still don't have new column cached data... will generate from larger one. + } + } + + // if we found cache re-use those nodes that are still current + let newNodes = []; + cacheNodes.forEach(function(cacheNode) { + const j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id}); + if (j !== -1) { + // still current, use cache info positions + nodes[j].x = cacheNode.x; + nodes[j].y = cacheNode.y; + nodes[j].width = cacheNode.width; + newNodes.push(nodes[j]); + nodes[j] = null; // erase it so we know what's left + } + }); + // ...and add any extra non-cached ones + const ratio = column / oldColumn; + nodes.forEach(function(node) { + if (!node) return; + node.x = (column === 1 ? 0 : Math.round(node.x * ratio)); + node.width = ((column === 1 || oldColumn === 1) ? 1 : (Math.round(node.width * ratio) || 1)); + newNodes.push(node); + }); + + // finally re-layout them in reverse order (to get correct placement) + newNodes = Utils.sort(newNodes, -1, column); + this._ignoreLayoutsNodeChange = true; + this.batchUpdate(); + this.nodes = []; // pretend we have no nodes to start with (we use same structures) to simplify layout + newNodes.forEach(function(node) { + this.addNode(node, false); // 'false' for add event trigger + node._dirty = true; // force attr update + }, this); + this.commit(); + delete this._ignoreLayoutsNodeChange; + } + + /** called to save initial position/size */ + public _saveInitial() { + this.nodes.forEach(function(n) { + n._origX = n.x; + n._origY = n.y; + n._origW = n.width; + n._origH = n.height; + delete n._dirty; + }); + } + + // legacy method renames + private getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); +} diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 5725e4475..6fe02327d 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 1.1.0-dev extra CSS for [2-11] columns (non default) + * gridstack 2.0.0-rc extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 5ec62d795..d3e65ed97 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,5 +1,6 @@ -/** gridstack.js 1.1.0-dev - IE and older browsers Polyfills for this library @preserve*/ -/** +// gridstack-poly.js 2.0.0-rc @preserve + +/** IE and older browsers Polyfills for this library * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts deleted file mode 100644 index 337c8855c..000000000 --- a/src/gridstack.d.ts +++ /dev/null @@ -1,644 +0,0 @@ -// Type definitions for Gridstack 1.1.0-dev -// Project: https://gridstackjs.com/ -// Definitions by: Pascal Senn -// Ricky Blankenaufulland -// Sl1MBoy -// John Archer -// Alain Dumesny -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped initially, but now part of gridstack.js -// TypeScript Version: 2.8 - -interface Window { - GridStack: GridStack; -} - -/* Other items in https://github.com/gridstack/gridstack.js/blob/develop/doc/README.md - * Grid attributes - * Item attributes - * Events - */ - -type GridStackElement = string | HTMLElement; -interface GridStackHTMLElement extends HTMLElement { - /** grid's parent DOM element points back to grid class */ - gridstack: GridStack; -} -type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' | - 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop' | string; - -interface GridStack { - /** - * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will - * simply return the existing instance (ignore any passed options). There is also a version that support - * multiple grids initialization. - * @param options grid options (optional) - * @param el element to convert to a grid (default to '.grid-stack' class selector) - * - * @example - * var grid = window.GridStack.init(); - * // Note: the HTMLElement (of type GridStackHTMLElement) will itself store a `gridstack: GridStack` value that can be retrieve later - * var grid = document.querySelector('.grid-stack').gridstack; - */ - init(options?: GridstackOptions, el?: GridStackElement): GridStack; - - /** - * Will initialize a list of elements (given a selector) and return an array of grids. - * @param options grid options (optional) - * @param selector element to convert to grids (default to '.grid-stack' class selector) - * - * @example - * var grids = window.GridStack.initAll(); - * grids.forEach(...) - */ - initAll(options?: GridstackOptions, selector?: string): GridStack[]; - - /** the HTML element tied to this grid after it's been initialized */ - el: GridStackHTMLElement; - - /** engine used to implement non DOM grid functionality */ - engine: GridStackEngine; - - /** - * Creates new widget and returns it. - * - * Widget will be always placed even if result height is more than actual grid height. - * You need to use willItFit method before calling addWidget for additional check. - * See also `makeWidget()`. - * - * @example - * var grid = GridStack.init(); - * grid.addWidget(el, {width: 3, autoPosition: true}); - * - * @param el widget to add - * @param options widget position/size options (optional) - */ - addWidget(el: GridStackElement, options ? : GridstackWidget): HTMLElement; - - /** - * Creates new widget and returns it. - * Legacy: Spelled out version of the widgets options, recommend use new version instead. - * - * @example - * var grid = GridStack.init(); - * grid.addWidget(el, 0, 0, 3, 2, true); - * - * @param el widget to add - * @param x widget position x (optional) - * @param y widget position y (optional) - * @param width widget dimension width (optional) - * @param height widget dimension height (optional) - * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (optional) - * @param minWidth minimum width allowed during resize/creation (optional) - * @param maxWidth maximum width allowed during resize/creation (optional) - * @param minHeight minimum height allowed during resize/creation (optional) - * @param maxHeight maximum height allowed during resize/creation (optional) - * @param id value for `data-gs-id` (optional) - */ - addWidget(el: GridStackElement, x ? : number, y ? : number, width ? : number, height ? : number, autoPosition ? : boolean, - minWidth ? : number, maxWidth ? : number, minHeight ? : number, maxHeight ? : number, id ? : number | string): HTMLElement; - - /** - * Initializes batch updates. You will see no changes until `commit()` method is called. - */ - batchUpdate(): void; - - /** - * Gets current cell height. - */ - cellHeight(): number; - - /** - * Update current cell height - see `GridstackOptions.cellHeight` for format. - * This method rebuilds an internal CSS style sheet. - * Note: You can expect performance issues if call this method too often. - * - * @param val the cell height - * @param noUpdate (Optional) if true, styles will not be updated - * - * @example - * grid.cellHeight(grid.cellWidth() * 1.2); - */ - cellHeight(val: number | string, noUpdate ? : boolean): void; - - /** - * Gets current cell width. - */ - cellWidth(): number; - - /** - * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate. - */ - commit(): void; - - /** - * relayout grid items to reclaim any empty space - */ - compact(): void; - - /** - * set the number of columns in the grid. Will update existing widgets to conform to new number of columns, - * as well as cache the original layout so you can revert back to previous positions without loss. - * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], - * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) - * @param column - Integer > 0 (default 12). - * @param doNotPropagate if true existing widgets will not be updated (optional) - */ - column(column: number, doNotPropagate ? : boolean): void; - - /** - * get the number of columns in the grid (default 12) - */ - column(): number; - - /** - * Destroys a grid instance. - * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). - */ - destroy(detachGrid ? : boolean): void; - - /** - * Disables widgets moving/resizing. This is a shortcut for: - * @example - * grid.movable('.grid-stack-item', false); - * grid.resizable('.grid-stack-item', false); - */ - disable(): void; - - /** - * Enables widgets moving/resizing. This is a shortcut for: - * @example - * grid.movable('.grid-stack-item', true); - * grid.resizable('.grid-stack-item', true); - */ - enable(): void; - - /** - * Enables/disables widget moving. - * - * @param doEnable - * @param includeNewWidgets will force new widgets to be draggable as per - * doEnable`s value by changing the disableDrag grid option. - */ - enableMove(doEnable: boolean, includeNewWidgets: boolean): void; - - /** - * Enables/disables widget resizing - * @param doEnable - * @param includeNewWidgets will force new widgets to be draggable as per - * doEnable`s value by changing the disableResize grid option. - */ - enableResize(doEnable: boolean, includeNewWidgets: boolean): void; - - /** - * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) - * @param mode - */ - float(mode: boolean): void; - - /** - * get the current float mode - */ - float(): boolean; - - /** - * Get the position of the cell under a pixel on screen. - * @param position the position of the pixel to resolve in - * absolute coordinates, as an object with top and left properties - * @param useOffset if true, value will be based on offset vs position (Optional. Default false). - * Useful when grid is within `position: relative` element - * - * Returns an object with properties `x` and `y` i.e. the column and row in the grid. - */ - getCellFromPixel(position: MousePosition, useOffset ? : boolean): CellPosition; - - /** returns the current number of rows */ - getRow(): number; - - /** - * Checks if specified area is empty. - * @param x the position x. - * @param y the position y. - * @param width the width of to check - * @param height the height of to check - */ - isAreaEmpty(x: number, y: number, width: number, height: number): void; - - /** - * Locks/unlocks widget. - * @param el widget to modify. - * @param val if true widget will be locked. - */ - locked(el: GridStackElement, val: boolean): void; - - /** - * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets. - * If you want gridstack to add the elements for you, use addWidget instead. - * Makes the given element a widget and returns it. - * @param el widget to convert. - * - * @example - * var grid = GridStack.init(); - * grid.el.appendChild('
    ') - * grid.makeWidget('gsi-1'); - */ - makeWidget(el: GridStackElement): HTMLElement; - - /** - * Set the maxWidth for a widget. - * @param el widget to modify. - * @param val A numeric value of the number of columns - */ - maxWidth(el: GridStackElement, val: number): void; - - /** - * Set the minWidth for a widget. - * @param el widget to modify. - * @param val A numeric value of the number of columns - */ - minWidth(el: GridStackElement, val: number): void; - - /** - * Set the maxHeight for a widget. - * @param el widget to modify. - * @param val A numeric value of the number of rows - */ - maxHeight(el: GridStackElement, val: number): void; - - /** - * Set the minHeight for a widget. - * @param el widget to modify. - * @param val A numeric value of the number of rows - */ - minHeight(el: GridStackElement, val: number): void; - - /** - * Enables/Disables moving. - * @param el widget to modify. - * @param val if true widget will be draggable. - */ - movable(el: GridStackElement, val: boolean): void; - - /** - * Changes widget position - * @param el widget to modify - * @param x new position x. If value is null or undefined it will be ignored. - * @param y new position y. If value is null or undefined it will be ignored. - */ - move(el: GridStackElement, x: number, y: number): void; - - /** - * unsubscribe from the 'on' event below - * @param name of the event (see possible values) - */ - off(name: GridStackEvent): void; - - /** - * Event handler that extracts our CustomEvent data out automatically for receiving custom - * notifications (see doc for supported events) - * @param name of the event (see possible values) or list of names space separated - * @param callback function called with event and optional second/third param - * (see README documentation for each signature). - * - * @example - * grid.on('added', function(e, items) { log('added ', items)} ); - * or - * grid.on('added removed change', function(e, items) { log(e.type, items)} ); - * - * Note: in some cases it is the same as calling native handler and parsing the event. - * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} ); - */ - on(name: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void): void; - - /** - * Removes widget from the grid. - * @param el widget to modify - * @param detachNode if false DOM node won't be removed from the tree (Default? true). - */ - removeWidget(el: GridStackElement, detachNode ? : boolean): void; - - /** - * Removes all widgets from the grid. - * @param detachNode if false DOM nodes won't be removed from the tree (Default? true). - */ - removeAll(detachNode ? : boolean): void; - - /** - * Changes widget size - * @param el widget to modify - * @param width new dimensions width. If value is null or undefined it will be ignored. - * @param height new dimensions height. If value is null or undefined it will be ignored. - */ - resize(el: GridStackElement, width: number, height: number): void; - - /** - * Enables/Disables resizing. - * @param el widget to modify - * @param val if true widget will be resizable. - */ - resizable(el: GridStackElement, val: boolean): void; - - /** - * Toggle the grid animation state. Toggles the `grid-stack-animate` class. - * @param doAnimate if true the grid will animate. - */ - setAnimation(doAnimate: boolean): void; - - /** - * Toggle the grid static state. Also toggle the grid-stack-static class. - * @param staticValue if true the grid become static. - */ - setStatic(staticValue: boolean): void; - - /** - * Updates widget position/size. - * @param el widget to modify - * @param x new position x. If value is null or undefined it will be ignored. - * @param y new position y. If value is null or undefined it will be ignored. - * @param width new dimensions width. If value is null or undefined it will be ignored. - * @param height new dimensions height. If value is null or undefined it will be ignored. - */ - update(el: GridStackElement, x: number, y: number, width: number, height: number): void; - - /** - * returns current vertical margin value - */ - verticalMargin(): number; - - /** - * Updates the vertical margin - see `GridstackOptions.verticalMargin` for format options. - * - * @param value new vertical margin value - * @param noUpdate (optional) if true, styles will not be updated - */ - verticalMargin(value: number | string, noUpdate ? : boolean): void; - - /** - * Returns true if the height of the grid will be less the vertical - * constraint. Always returns true if grid doesn't have height constraint. - * @param x new position x. If value is null or undefined it will be ignored. - * @param y new position y. If value is null or undefined it will be ignored. - * @param width new dimensions width. If value is null or undefined it will be ignored. - * @param height new dimensions height. If value is null or undefined it will be ignored. - * @param autoPosition if true then x, y parameters will be ignored and widget - * will be places on the first available position - * - * @example - * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) { - * grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); - * } else { - * alert('Not enough free space to place the widget'); - * } - */ - willItFit(x: number, y: number, width: number, height: number, autoPosition: boolean): boolean; -} - -/** - * Defines the GridStack engine that does most no DOM grid manipulation. - * See GridStack methods and vars for descriptions. - * - * NOTE: values should not be modified - call the GridStack API instead - */ -interface GridStackEngine { - column: number; - float: boolean; - maxRow: number; - nodes: GridStackNode[]; - getRow(): number; -} - -/** - * Defines the coordinates of an object - */ -interface MousePosition { - top: number; - left: number; -} - -/** - * Defines the position of a cell inside the grid - */ -interface CellPosition { - x: number; - y: number; -} - -/** - * Gridstack Widget creation options - * @param x widget position x (default?: 0) - * @param y widget position y (default?: 0) - * @param width widget dimension width (default?: 1) - * @param height widget dimension height (default?: 1) - * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (default?: false) - * @param minWidth minimum width allowed during resize/creation (default?: undefined = un-constrained) - * @param maxWidth maximum width allowed during resize/creation (default?: undefined = un-constrained) - * @param minHeight minimum height allowed during resize/creation (default?: undefined = un-constrained) - * @param maxHeight maximum height allowed during resize/creation (default?: undefined = un-constrained) - * @param noResize prevent resizing (default?: undefined = un-constrained) - * @param noMove prevents moving (default?: undefined = un-constrained) - * @param locked prevents moving and resizing (default?: undefined = un-constrained) - * @param resizeHandles widgets can have their own resize handles. For example 'e,w' will make the particular widget only resize east and west. - * @param id value for `data-gs-id` stored on the widget (default?: undefined) - */ -interface GridstackWidget { - x ? : number; - y ? : number; - width ? : number; - height ? : number; - autoPosition ? : boolean; - minWidth ? : number; - maxWidth ? : number; - minHeight ? : number; - maxHeight ? : number; - noResize ? : boolean; - noMove ? : boolean; - locked ? : boolean; - resizeHandles ?: string; - id ? : number | string; -} - -/** - * internal descriptions describing the items in the grid - */ -interface GridStackNode extends GridstackWidget { - el: HTMLElement; - _grid: GridStack; -} - -interface Utils { - /** - * Sorts array of nodes - * @param nodes array to sort - * @param dir 1 for asc, -1 for desc (optional) - * @param width width of the grid. If undefined the width will be calculated automatically (optional). - **/ - sort(nodes: GridStackNode[], dir ? : number, width ? : number): void; -} - -/** - * Gridstack Options - * Defines the options for a Gridstack - */ -interface GridstackOptions { - /** - * accept widgets dragged from other grids or from outside (default: `false`). Can be: - * `true` (uses `'.grid-stack-item'` class filter) or `false`, - * string for explicit class name, - * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html) - */ - acceptWidgets ? : boolean | string | ((i: number, element: Element) => boolean); - - /** - * if true the resizing handles are shown even if the user is not hovering over the widget (default?: false) - */ - alwaysShowResizeHandle ? : boolean; - - /** - * turns animation on (default?: true) - */ - animate ? : boolean; - - /** - * if false gridstack will not initialize existing items (default?: true) - */ - auto ? : boolean; - - /** - * one cell height (default?: 60). Can be: - * an integer (px) - * a string (ex: '100px', '10em', '10rem', '10%') - * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files. - * 'auto' - height will be calculated to match cell width (initial square grid). - */ - cellHeight ? : number | string; - - /** - * (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') - */ - cellHeightUnit ? : string; - - /** - * number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns - */ - column ? : number; - - /** class that implement drag'n'drop functionality for gridstack. If false grid will be static. - * (default?: null - first available plugin will be used) - */ - ddPlugin ? : boolean | null | any; - - /** disallows dragging of widgets (default?: false) */ - disableDrag ? : boolean; - - /** disables the onColumnMode when the window width is less than minWidth (default?: false) */ - disableOneColumnMode ? : boolean; - - /** disallows resizing of widgets (default?: false). */ - disableResize ? : boolean; - - /** - * allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) - */ - draggable ? : {}; - - /** - * let user drag nested grid items out of a parent or not (default false) - */ - dragOut ? : boolean; - - /** - * enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) - */ - float ? : boolean; - - /** - * draggable handle selector (default?: '.grid-stack-item-content') - */ - handle ? : string; - - /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */ - handleClass ? : string; - - /** - * widget class (default?: 'grid-stack-item') - */ - itemClass ? : string; - - /** - * maximum rows amount. Default? is 0 which means no maximum rows - */ - maxRow ? : number; - - /** - * minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute - * on the grid div in pixels, which will round to the closest row. - */ - minRow?: number; - - /** - * minimal width. If window width is less, grid will be shown in one column mode (default?: 768) - */ - minWidth ? : number; - - /** - * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column - * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false) - */ - oneColumnModeDomSort?: boolean; - - /** - * class for placeholder (default?: 'grid-stack-placeholder') - */ - placeholderClass ? : string; - - /** placeholder default content (default?: '') */ - placeholderText ? : string; - - /** - * allows to override UI resizable options. (default?: { autoHide?: true, handles?: 'se' }) - */ - resizable ? : {}; - - /** - * if true widgets could be removed by dragging outside of the grid. It could also be a selector string, - * in this case widgets will be removed by dropping them there (default?: false) - * See example (http://gridstack.github.io/gridstack.js/demo/two.html) - */ - removable ? : boolean | string; - - /** - * time in milliseconds before widget is being removed while dragging outside of the grid. (default?: 2000) - */ - removeTimeout ? : number; - - /** - * fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. - * (default `0` no constrain) - */ - row?: number; - - /** - * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto') - * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html) - */ - rtl ? : boolean | 'auto'; - - /** - * makes grid static (default?: false). If `true` widgets are not movable/resizable. - * You don't even need draggable/resizable. A CSS class - * 'grid-stack-static' is also added to the element. - */ - staticGrid ? : boolean; - - /** - * vertical gap size (default?: 20). Can be: - * an integer (px) - * a string (ex: '2em', '20px', '2rem') - */ - verticalMargin ? : number | string; - - /** - * (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem') - */ - verticalMarginUnit ? : string; -} \ No newline at end of file diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js deleted file mode 100644 index 0c5c95fb2..000000000 --- a/src/gridstack.jQueryUI.js +++ /dev/null @@ -1,90 +0,0 @@ -/** gridstack.js 1.1.0-dev - JQuery UI Drag&Drop plugin @preserve */ -/** - * https://gridstackjs.com/ - * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov - * gridstack.js may be freely distributed under the MIT license. -*/ -(function(factory) { - /* we compile this in so no need for required loading - if (typeof define === 'function' && define.amd) { - define(['jquery', 'gridstack', 'exports'], factory); - } else if (typeof exports !== 'undefined') { - try { jQuery = require('jquery'); } catch (e) {} - try { gridstack = require('gridstack'); } catch (e) {} - factory(jQuery, gridstack.GridStack, exports); - } else */{ - factory(jQuery, GridStack, window); - } -})(function($, GridStack, scope) { - /** - * @class JQueryUIGridStackDragDropPlugin - * jQuery UI implementation of drag'n'drop gridstack plugin. - */ - function JQueryUIGridStackDragDropPlugin(grid) { - GridStack.DragDropPlugin.call(this, grid); - } - - GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - - JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype); - JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; - - JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.resizable(opts); - } else if (opts === 'option') { - var key = arguments[2]; - var value = arguments[3]; - el.resizable(opts, key, value); - } else { - var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') : - this.grid.opts.resizable.handles; - el.resizable($.extend({}, this.grid.opts.resizable, { - handles: handles - }, { - start: opts.start || function() {}, - stop: opts.stop || function() {}, - resize: opts.resize || function() {} - })); - } - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.draggable = function(el, opts) { - el = $(el); - if (opts === 'disable' || opts === 'enable') { - el.draggable(opts); - } else { - el.draggable($.extend({}, this.grid.opts.draggable, { - containment: (this.grid.opts.isNested && !this.grid.opts.dragOut) ? - this.grid.$el.parent() : - (this.grid.opts.draggable.containment || null), - start: opts.start || function() {}, - stop: opts.stop || function() {}, - drag: opts.drag || function() {} - })); - } - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.droppable = function(el, opts) { - el = $(el); - el.droppable(opts); - return this; - }; - - JQueryUIGridStackDragDropPlugin.prototype.isDroppable = function(el, opts) { - el = $(el); - return Boolean(el.data('droppable')); - }; - - JQueryUIGridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - $(el).on(eventName, callback); - return this; - }; - - scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; - - return JQueryUIGridStackDragDropPlugin; -}); diff --git a/src/gridstack.js b/src/gridstack.js deleted file mode 100644 index a59ce77c9..000000000 --- a/src/gridstack.js +++ /dev/null @@ -1,2119 +0,0 @@ -/** - * gridstack.js 1.1.0-dev - * https://gridstackjs.com/ - * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov - * gridstack.js may be freely distributed under the MIT license. - * @preserve -*/ -(function(factory) { - /* [alain] we compile jquery with our code, so no need to 'load' externally - if (typeof define === 'function' && define.amd) { - define(['jquery', 'exports'], factory); - } else if (typeof exports !== 'undefined') { - var jQueryModule; - - try { jQueryModule = require('jquery'); } catch (e) {} - - factory(jQueryModule || window.jQuery, exports); - } else */{ - factory(window.jQuery, window); - } -})(function($, scope) { - - // checks for obsolete method names - var obsolete = function(f, oldName, newName, rev) { - var wrapper = function() { - console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' + - 'with `' + newName + '`. It will be **completely** removed in v1.0'); - return f.apply(this, arguments); - }; - wrapper.prototype = f.prototype; - - return wrapper; - }; - - // checks for obsolete grid options (can be used for any fields, but msg is about options) - var obsoleteOpts = function(opts, oldName, newName, rev) { - if (opts[oldName] !== undefined) { - opts[newName] = opts[oldName]; - console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' + - newName + '`. It will be **completely** removed in v1.0'); - } - }; - - // checks for obsolete grid options which are gone - var obsoleteOptsDel = function(opts, oldName, rev, info) { - if (opts[oldName] !== undefined) { - console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info); - } - }; - - // checks for obsolete Jquery element attributes - var obsoleteAttr = function(el, oldName, newName, rev) { - var oldAttr = el.attr(oldName); - if (oldAttr !== undefined) { - el.attr(newName, oldAttr); - console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' + - newName + '`. It will be **completely** removed in v1.0'); - } - }; - - var Utils = { - - isIntercepted: function(a, b) { - return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); - }, - - sort: function(nodes, dir, column) { - if (!column) { - var widths = nodes.map(function(node) { return node.x + node.width; }); - column = Math.max.apply(Math, widths); - } - - if (dir === -1) - return Utils.sortBy(nodes, function(n) { return -(n.x + n.y * column); }); - else - return Utils.sortBy(nodes, function(n) { return (n.x + n.y * column); }); - }, - - createStylesheet: function(id, parent) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.setAttribute('data-gs-style-id', id); - if (style.styleSheet) { - style.styleSheet.cssText = ''; - } else { - style.appendChild(document.createTextNode('')); - } - if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head - parent.insertBefore(style, parent.firstChild); - return style.sheet; - }, - - removeStylesheet: function(id) { - $('STYLE[data-gs-style-id=' + id + ']').remove(); - }, - - insertCSSRule: function(sheet, selector, rules, index) { - if (typeof sheet.insertRule === 'function') { - sheet.insertRule(selector + '{' + rules + '}', index); - } else if (typeof sheet.addRule === 'function') { - sheet.addRule(selector, rules, index); - } - }, - - toBool: function(v) { - if (typeof v === 'boolean') { - return v; - } - if (typeof v === 'string') { - v = v.toLowerCase(); - return !(v === '' || v === 'no' || v === 'false' || v === '0'); - } - return Boolean(v); - }, - - _collisionNodeCheck: function(n) { - return n !== this.node && Utils.isIntercepted(n, this.nn); - }, - - _didCollide: function(bn) { - return Utils.isIntercepted({x: this.n.x, y: this.newY, width: this.n.width, height: this.n.height}, bn); - }, - - _isAddNodeIntercepted: function(n) { - return Utils.isIntercepted({x: this.x, y: this.y, width: this.node.width, height: this.node.height}, n); - }, - - parseHeight: function(val) { - var height = val; - var heightUnit = 'px'; - if (height && typeof height === 'string') { - var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/); - if (!match) { - throw new Error('Invalid height'); - } - heightUnit = match[2] || 'px'; - height = parseFloat(match[1]); - } - return {height: height, unit: heightUnit}; - }, - - without: function(array, item) { - var index = array.indexOf(item); - - if (index !== -1) { - array = array.slice(0); - array.splice(index, 1); - } - - return array; - }, - - sortBy: function(array, getter) { - return array.slice(0).sort(function(left, right) { - var valueLeft = getter(left); - var valueRight = getter(right); - - if (valueRight === valueLeft) { - return 0; - } - - return valueLeft > valueRight ? 1 : -1; - }); - }, - - defaults: function(target) { - var sources = Array.prototype.slice.call(arguments, 1); - - sources.forEach(function(source) { - for (var prop in source) { - if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { - target[prop] = source[prop]; - } - } - }); - - return target; - }, - - clone: function(target) { - return $.extend({}, target); - }, - - throttle: function(callback, delay) { - var isWaiting = false; - - return function() { - if (!isWaiting) { - callback.apply(this, arguments); - isWaiting = true; - setTimeout(function() { isWaiting = false; }, delay); - } - }; - }, - - removePositioningStyles: function(el) { - var style = el[0].style; - if (style.position) { - style.removeProperty('position'); - } - if (style.left) { - style.removeProperty('left'); - } - if (style.top) { - style.removeProperty('top'); - } - if (style.width) { - style.removeProperty('width'); - } - if (style.height) { - style.removeProperty('height'); - } - }, - getScrollParent: function(el) { - var returnEl; - if (el === null) { - returnEl = null; - } else if (el.scrollHeight > el.clientHeight) { - returnEl = el; - } else { - returnEl = Utils.getScrollParent(el.parentNode); - } - return returnEl; - }, - updateScrollPosition: function(el, ui, distance) { - // is widget in view? - var rect = el.getBoundingClientRect(); - var innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); - if (rect.top < 0 || - rect.bottom > innerHeightOrClientHeight - ) { - // set scrollTop of first parent that scrolls - // if parent is larger than el, set as low as possible - // to get entire widget on screen - var offsetDiffDown = rect.bottom - innerHeightOrClientHeight; - var offsetDiffUp = rect.top; - var scrollEl = Utils.getScrollParent(el); - if (scrollEl !== null) { - var prevScroll = scrollEl.scrollTop; - if (rect.top < 0 && distance < 0) { - // moving up - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp; - } - } else if (distance > 0) { - // moving down - if (el.offsetHeight > innerHeightOrClientHeight) { - scrollEl.scrollTop += distance; - } else { - scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown; - } - } - // move widget y by amount scrolled - ui.position.top += scrollEl.scrollTop - prevScroll; - } - } - } - }; - - /** - * @class GridStackDragDropPlugin - * Base class for drag'n'drop plugin. - */ - function GridStackDragDropPlugin(grid) { - this.grid = grid; - } - - GridStackDragDropPlugin.registeredPlugins = []; - - GridStackDragDropPlugin.registerPlugin = function(pluginClass) { - GridStackDragDropPlugin.registeredPlugins.push(pluginClass); - }; - - GridStackDragDropPlugin.prototype.resizable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.draggable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.droppable = function(el, opts) { - return this; - }; - - GridStackDragDropPlugin.prototype.isDroppable = function(el) { - return false; - }; - - GridStackDragDropPlugin.prototype.on = function(el, eventName, callback) { - return this; - }; - - - var idSeq = 0; - - var GridStackEngine = function(column, onchange, float, maxRow, items) { - this.column = column || 12; - this.float = float || false; - this.maxRow = maxRow || 0; - - this.nodes = items || []; - this.onchange = onchange || function() {}; - - this._addedNodes = []; - this._removedNodes = []; - this._batchMode = false; - }; - - GridStackEngine.prototype.batchUpdate = function() { - if (this._batchMode) return; - this._batchMode = true; - this._prevFloat = this.float; - this.float = true; // let things go anywhere for now... commit() will restore and possibly reposition - }; - - GridStackEngine.prototype.commit = function() { - if (!this._batchMode) return; - this._batchMode = false; - this.float = this._prevFloat; - delete this._prevFloat; - this._packNodes(); - this._notify(); - }; - - // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 - GridStackEngine.prototype.getNodeDataByDOMEl = function(el) { - return this.nodes.find(function(node) { return el === node.el }); - }; - - GridStackEngine.prototype._fixCollisions = function(node) { - var self = this; - this._sortNodes(-1); - - var nn = node; - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - if (!this.float && !hasLocked) { - nn = {x: 0, y: node.y, width: this.column, height: node.height}; - } - while (true) { - var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); - if (!collisionNode) { return; } - var moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height, - collisionNode.width, collisionNode.height, true); - if (!moved) { return; } // break inf loop if we couldn't move after all (ex: maxRow, fixed) - } - }; - - GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) { - var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; - var collisionNode = this.nodes.find(function(n) { - return Utils.isIntercepted(n, nn); - }); - return !collisionNode; - }; - - GridStackEngine.prototype._sortNodes = function(dir) { - this.nodes = Utils.sort(this.nodes, dir, this.column); - }; - - GridStackEngine.prototype._packNodes = function() { - this._sortNodes(); - - if (this.float) { - this.nodes.forEach(function(n, i) { - if (n._updating || n._packY === undefined || n.y === n._packY) { - return; - } - - var newY = n.y; - while (newY >= n._packY) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - - if (!collisionNode) { - n._dirty = true; - n.y = newY; - } - --newY; - } - }, this); - } else { - this.nodes.forEach(function(n, i) { - if (n.locked) { return; } - while (n.y > 0) { - var newY = n.y - 1; - var canBeMoved = i === 0; - - if (i > 0) { - var collisionNode = this.nodes - .slice(0, i) - .find(Utils._didCollide, {n: n, newY: newY}); - canBeMoved = collisionNode === undefined; - } - - if (!canBeMoved) { break; } - // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions - // and move items back. The user 'change' CB should detect changes from the original - // starting position instead. - n._dirty = (n.y !== newY); - n.y = newY; - } - }, this); - } - }; - - GridStackEngine.prototype._prepareNode = function(node, resizing) { - node = node || {}; - // if we're missing position, have the grid position us automatically (before we set them to 0,0) - if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) { - node.autoPosition = true; - } - - // assign defaults for missing required fields - var defaults = {width: 1, height: 1, x: 0, y: 0}; - node = Utils.defaults(node, defaults); - - // convert any strings over - node.x = parseInt(node.x); - node.y = parseInt(node.y); - node.width = parseInt(node.width); - node.height = parseInt(node.height); - node.autoPosition = node.autoPosition || false; - node.noResize = node.noResize || false; - node.noMove = node.noMove || false; - - // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #) - if (Number.isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; } - if (Number.isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; } - if (Number.isNaN(node.width)) { node.width = defaults.width; } - if (Number.isNaN(node.height)) { node.height = defaults.height; } - - if (node.maxWidth !== undefined) { node.width = Math.min(node.width, node.maxWidth); } - if (node.maxHeight !== undefined) { node.height = Math.min(node.height, node.maxHeight); } - if (node.minWidth !== undefined) { node.width = Math.max(node.width, node.minWidth); } - if (node.minHeight !== undefined) { node.height = Math.max(node.height, node.minHeight); } - - if (node.width > this.column) { - node.width = this.column; - } else if (node.width < 1) { - node.width = 1; - } - if (this.maxRow && node.height > this.maxRow) { - node.height = this.maxRow; - } else if (node.height < 1) { - node.height = 1; - } - - if (node.x < 0) { - node.x = 0; - } - if (node.y < 0) { - node.y = 0; - } - - if (node.x + node.width > this.column) { - if (resizing) { - node.width = this.column - node.x; - } else { - node.x = this.column - node.width; - } - } - if (this.maxRow && node.y + node.height > this.maxRow) { - if (resizing) { - node.height = this.maxRow - node.y; - } else { - node.y = this.maxRow - node.height; - } - } - - return node; - }; - - GridStackEngine.prototype._notify = function() { - if (this._batchMode) { return; } - var args = Array.prototype.slice.call(arguments, 0); - args[0] = (args[0] === undefined ? [] : (Array.isArray(args[0]) ? args[0] : [args[0]]) ); - args[1] = (args[1] === undefined ? true : args[1]); - var dirtyNodes = args[0].concat(this.getDirtyNodes()); - this.onchange(dirtyNodes, args[1]); - }; - - GridStackEngine.prototype.cleanNodes = function() { - if (this._batchMode) { return; } - this.nodes.forEach(function(n) { delete n._dirty; }); - }; - - GridStackEngine.prototype.getDirtyNodes = function(verify) { - // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state - if (verify) { - var dirtNodes = []; - this.nodes.forEach(function (n) { - if (n._dirty) { - if (n.y === n._origY && n.x === n._origX && n.width === n._origW && n.height === n._origH) { - delete n._dirty; - } else { - dirtNodes.push(n); - } - } - }); - return dirtNodes; - } - - return this.nodes.filter(function(n) { return n._dirty; }); - }; - - GridStackEngine.prototype.addNode = function(node, triggerAddEvent) { - node = this._prepareNode(node); - - node._id = node._id || ++idSeq; - - if (node.autoPosition) { - this._sortNodes(); - - for (var i = 0;; ++i) { - var x = i % this.column; - var y = Math.floor(i / this.column); - if (x + node.width > this.column) { - continue; - } - if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) { - node.x = x; - node.y = y; - delete node.autoPosition; // found our slot - break; - } - } - } - - this.nodes.push(node); - if (triggerAddEvent) { - this._addedNodes.push(node); - } - - this._fixCollisions(node); - this._packNodes(); - this._notify(); - return node; - }; - - GridStackEngine.prototype.removeNode = function(node, detachNode) { - detachNode = (detachNode === undefined ? true : detachNode); - this._removedNodes.push(node); - node._id = null; // hint that node is being removed - this.nodes = Utils.without(this.nodes, node); - this._packNodes(); - this._notify(node, detachNode); - }; - - GridStackEngine.prototype.removeAll = function(detachNode) { - delete this._layouts; - if (this.nodes.length === 0) { return; } - detachNode = (detachNode === undefined ? true : detachNode); - this.nodes.forEach(function(n) { n._id = null; }); // hint that node is being removed - this._removedNodes = this.nodes; - this.nodes = []; - this._notify(this._removedNodes, detachNode); - }; - - GridStackEngine.prototype.canMoveNode = function(node, x, y, width, height) { - if (!this.isNodeChangedPosition(node, x, y, width, height)) { - return false; - } - var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; })); - - if (!this.maxRow && !hasLocked) { - return true; - } - - var clonedNode; - var clone = new GridStackEngine( - this.column, - null, - this.float, - 0, - this.nodes.map(function(n) { - if (n === node) { - clonedNode = $.extend({}, n); - return clonedNode; - } - return $.extend({}, n); - })); - - if (!clonedNode) { return true;} - - clone.moveNode(clonedNode, x, y, width, height); - - var res = true; - - if (hasLocked) { - res &= !Boolean(clone.nodes.find(function(n) { - return n !== clonedNode && Boolean(n.locked) && Boolean(n._dirty); - })); - } - if (this.maxRow) { - res &= clone.getRow() <= this.maxRow; - } - - return res; - }; - - GridStackEngine.prototype.canBePlacedWithRespectToHeight = function(node) { - if (!this.maxRow) { - return true; - } - - var clone = new GridStackEngine( - this.column, - null, - this.float, - 0, - this.nodes.map(function(n) { return $.extend({}, n); })); - clone.addNode(node); - return clone.getRow() <= this.maxRow; - }; - - GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) { - if (typeof x !== 'number') { x = node.x; } - if (typeof y !== 'number') { y = node.y; } - if (typeof width !== 'number') { width = node.width; } - if (typeof height !== 'number') { height = node.height; } - - if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); } - if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); } - if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); } - if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); } - - if (node.x === x && node.y === y && node.width === width && node.height === height) { - return false; - } - return true; - }; - - GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { - if (typeof x !== 'number') { x = node.x; } - if (typeof y !== 'number') { y = node.y; } - if (typeof width !== 'number') { width = node.width; } - if (typeof height !== 'number') { height = node.height; } - - // constrain the passed in values and check if we're still changing our node - var resizing = (node.width !== width || node.height !== height); - var nn = { x: x, y: y, width: width, height: height, - maxWidth: node.maxWidth, maxHeight: NodeIterator.maxHeight, minWidth: node.minWidth, minHeight: node.minHeight}; - nn = this._prepareNode(nn, resizing); - if (node.x === nn.x && node.y === nn.y && node.width === nn.width && node.height === nn.height) { - return null; - } - - node._dirty = true; - - node.x = node.lastTriedX = nn.x; - node.y = node.lastTriedY = nn.y; - node.width = node.lastTriedWidth = nn.width; - node.height = node.lastTriedHeight = nn.height; - - this._fixCollisions(node); - if (!noPack) { - this._packNodes(); - this._notify(); - } - return node; - }; - - GridStackEngine.prototype.getRow = function() { - return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0); - }; - - GridStackEngine.prototype.beginUpdate = function(node) { - if (node._updating) return; - node._updating = true; - this.nodes.forEach(function(n) { n._packY = n.y; }); - }; - - GridStackEngine.prototype.endUpdate = function() { - var n = this.nodes.find(function(n) { return n._updating; }); - if (n) { - n._updating = false; - this.nodes.forEach(function(n) { delete n._packY; }); - } - }; - - /** - * Construct a grid item from the given element and options - * @param {GridStackElement} el - * @param {GridstackOptions} opts - */ - var GridStack = function(el, opts) { - var self = this; - var oneColumnMode, _prevColumn, isAutoCellHeight; - - opts = opts || {}; - - this.$el = $(el); // TODO: legacy code - this.el = this.$el.get(0); // exposed HTML element to the user - - obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); - obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); - obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead'); - - // container attributes - obsoleteAttr(this.$el, 'data-gs-width', 'data-gs-column', 'v0.5.3'); - obsoleteAttr(this.$el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3'); - obsoleteAttr(this.$el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0'); - - opts.itemClass = opts.itemClass || 'grid-stack-item'; - var isNested = this.$el.closest('.' + opts.itemClass).length > 0; - - // if row property exists, replace minRow and maxRow instead - if (opts.row) { - opts.minRow = opts.maxRow = opts.row; - delete opts.row; - } - var rowAttr = parseInt(this.$el.attr('data-gs-row')); - - // elements attributes override any passed options (like CSS style) - merge the two together - this.opts = Utils.defaults(opts, { - column: parseInt(this.$el.attr('data-gs-column')) || 12, - minRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-min-row')) || 0, - maxRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-max-row')) || 0, - itemClass: 'grid-stack-item', - placeholderClass: 'grid-stack-placeholder', - placeholderText: '', - handle: '.grid-stack-item-content', - handleClass: null, - cellHeight: 60, - verticalMargin: 20, - auto: true, - minWidth: 768, - float: false, - staticGrid: false, - _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), - animate: Boolean(this.$el.attr('data-gs-animate')) || false, - alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: Utils.defaults(opts.resizable || {}, { - autoHide: !(opts.alwaysShowResizeHandle || false), - handles: 'se' - }), - draggable: Utils.defaults(opts.draggable || {}, { - handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || - '.grid-stack-item-content', - scroll: false, - appendTo: 'body' - }), - disableDrag: opts.disableDrag || false, - disableResize: opts.disableResize || false, - rtl: 'auto', - removable: false, - removableOptions: Utils.defaults(opts.removableOptions || {}, { - accept: '.' + opts.itemClass - }), - removeTimeout: 2000, - verticalMarginUnit: 'px', - cellHeightUnit: 'px', - disableOneColumnMode: opts.disableOneColumnMode || false, - oneColumnModeDomSort: opts.oneColumnModeDomSort, - ddPlugin: null - }); - - if (this.opts.ddPlugin === false) { - this.opts.ddPlugin = GridStackDragDropPlugin; - } else if (this.opts.ddPlugin === null) { - this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; - } - - this.dd = new this.opts.ddPlugin(this); - - if (this.opts.rtl === 'auto') { - this.opts.rtl = this.$el.css('direction') === 'rtl'; - } - - if (this.opts.rtl) { - this.$el.addClass('grid-stack-rtl'); - } - - this.opts.isNested = isNested; - - isAutoCellHeight = (this.opts.cellHeight === 'auto'); - if (isAutoCellHeight) { - // make the cell square initially - self.cellHeight(self.cellWidth(), true); - } else { - this.cellHeight(this.opts.cellHeight, true); - } - this.verticalMargin(this.opts.verticalMargin, true); - - this.$el.addClass(this.opts._class); - - this._setStaticClass(); - - if (isNested) { - this.$el.addClass('grid-stack-nested'); - } - - this._initStyles(); - - this.engine = new GridStackEngine(this.opts.column, function(nodes, detachNode) { - detachNode = (detachNode === undefined ? true : detachNode); - var maxHeight = 0; - this.nodes.forEach(function(n) { - maxHeight = Math.max(maxHeight, n.y + n.height); - }); - nodes.forEach(function(n) { - if (detachNode && n._id === null) { - if (n.el) { - $(n.el).remove(); - } - } else { - $(n.el) - .attr('data-gs-x', n.x) - .attr('data-gs-y', n.y) - .attr('data-gs-width', n.width) - .attr('data-gs-height', n.height); - } - }); - self._updateStyles(maxHeight + 10); - }, this.opts.float, this.opts.maxRow); - - if (this.opts.auto) { - var elements = []; - var _this = this; - this.$el.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') - .each(function(index, el) { - el = $(el); - var x = parseInt(el.attr('data-gs-x')); - var y = parseInt(el.attr('data-gs-y')); - elements.push({ - el: el.get(0), - // if x,y are missing (autoPosition) add them to end of list - but keep their respective DOM order - i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * _this.opts.column - }); - }); - Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(item) { - this._prepareElement(item.el); - }, this); - } - this.engine._saveInitial(); // initial start of items - - this.setAnimation(this.opts.animate); - - this.placeholder = $( - '
    ' + - '
    ' + this.opts.placeholderText + '
    ').hide(); - - this._updateContainerHeight(); - - this._updateHeightsOnResize = Utils.throttle(function() { - self.cellHeight(self.cellWidth(), false); - }, 100); - - /** - * called when we are being resized - check if the one Column Mode needs to be turned on/off - * and remember the prev columns we used. - */ - this.onResizeHandler = function() { - if (isAutoCellHeight) { - self._updateHeightsOnResize(); - } - - if (self.opts.staticGrid) { return; } - - if (!self.opts.disableOneColumnMode && (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= self.opts.minWidth) { - if (self.oneColumnMode) { return; } - self.oneColumnMode = true; - self.column(1); - } else { - if (!self.oneColumnMode) { return; } - self.oneColumnMode = false; - self.column(self._prevColumn); - } - }; - - $(window).resize(this.onResizeHandler); - this.onResizeHandler(); - - if (!self.opts.staticGrid && typeof self.opts.removable === 'string') { - var trashZone = $(self.opts.removable); - if (!this.dd.isDroppable(trashZone)) { - this.dd.droppable(trashZone, self.opts.removableOptions); - } - this.dd - .on(trashZone, 'dropover', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (!node || node._grid !== self) { - return; - } - el.data('inTrashZone', true); - self._setupRemovingTimeout(el); - }) - .on(trashZone, 'dropout', function(event, ui) { - var el = $(ui.draggable); - var node = el.data('_gridstack_node'); - if (!node || node._grid !== self) { - return; - } - el.data('inTrashZone', false); - self._clearRemovingTimeout(el); - }); - } - - if (!self.opts.staticGrid && self.opts.acceptWidgets) { - var draggingElement = null; - - var onDrag = function(event, ui) { - var el = draggingElement; - var node = el.data('_gridstack_node'); - var pos = self.getCellFromPixel({left: event.pageX, top: event.pageY}, true); - var x = Math.max(0, pos.x); - var y = Math.max(0, pos.y); - if (!node._added) { - node._added = true; - - node.el = el.get(0); - node.autoPosition = true; - node.x = x; - node.y = y; - self.engine.cleanNodes(); - self.engine.beginUpdate(node); - self.engine.addNode(node); - - self.$el.append(self.placeholder); - self.placeholder - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .show(); - node.el = self.placeholder.get(0); - node._beforeDragX = node.x; - node._beforeDragY = node.y; - - self._updateContainerHeight(); - } - if (!self.engine.canMoveNode(node, x, y)) { - return; - } - self.engine.moveNode(node, x, y); - self._updateContainerHeight(); - }; - - this.dd - .droppable(self.$el, { - accept: function(el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (node && node._grid === self) { - return false; - } - return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets); - } - }) - .on(self.$el, 'dropover', function(event, ui) { - var el = $(ui.draggable); - var width, height; - - // see if we already have a node with widget/height and check for attributes - var origNode = el.data('_gridstack_node'); - if (!origNode || !origNode.width || !origNode.height) { - var w = parseInt(el.attr('data-gs-width')); - if (w > 0) { origNode = origNode || {}; origNode.width = w; } - var h = parseInt(el.attr('data-gs-height')); - if (h > 0) { origNode = origNode || {}; origNode.height = h; } - } - - // if not calculate the grid size based on element outer size - // height: Each row is cellHeight + verticalMargin, until last one which has no margin below - var cellWidth = self.cellWidth(); - var cellHeight = self.cellHeight(); - var verticalMargin = self.opts.verticalMargin; - width = origNode && origNode.width ? origNode.width : Math.ceil(el.outerWidth() / cellWidth); - height = origNode && origNode.height ? origNode.height : Math.round((el.outerHeight() + verticalMargin) / (cellHeight + verticalMargin)); - - draggingElement = el; - - var node = self.engine._prepareNode({width: width, height: height, _added: false, _temporary: true}); - node.isOutOfGrid = true; - el.data('_gridstack_node', node); - el.data('_gridstack_node_orig', origNode); - - el.on('drag', onDrag); - return false; // prevent parent from receiving msg (which may be grid as well) - }) - .on(self.$el, 'dropout', function(event, ui) { - // jquery-ui bug. Must verify widget is being dropped out - // check node variable that gets set when widget is out of grid - var el = $(ui.draggable); - if (!el.data('_gridstack_node')) { - return; - } - var node = el.data('_gridstack_node'); - if (!node.isOutOfGrid) { - return; - } - el.unbind('drag', onDrag); - node.el = null; - self.engine.removeNode(node); - self.placeholder.detach(); - self._updateContainerHeight(); - el.data('_gridstack_node', el.data('_gridstack_node_orig')); - return false; // prevent parent from receiving msg (which may be grid as well) - }) - .on(self.$el, 'drop', function(event, ui) { - self.placeholder.detach(); - - var node = $(ui.draggable).data('_gridstack_node'); - node.isOutOfGrid = false; - node._grid = self; - var el = $(ui.draggable).clone(false); - el.data('_gridstack_node', node); - var originalNode = $(ui.draggable).data('_gridstack_node_orig'); - if (originalNode !== undefined && originalNode._grid !== undefined) { - originalNode._grid._triggerRemoveEvent(); - } - $(ui.helper).remove(); - node.el = el.get(0); - self.placeholder.hide(); - Utils.removePositioningStyles(el); - el.find('div.ui-resizable-handle').remove(); - - el - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .addClass(self.opts.itemClass) - .enableSelection() - .removeData('draggable') - .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') - .unbind('drag', onDrag); - self.$el.append(el); - self._prepareElementsByNode(el, node); - self._updateContainerHeight(); - self.engine._addedNodes.push(node); - self._triggerAddEvent(); - self._triggerChangeEvent(); - - self.engine.endUpdate(); - $(ui.draggable).unbind('drag', onDrag); - $(ui.draggable).removeData('_gridstack_node'); - $(ui.draggable).removeData('_gridstack_node_orig'); - self.$el.trigger('dropped', [originalNode, node]); - return false; // prevent parent from receiving msg (which may be grid as well) - }); - } - }; - - GridStack.prototype._triggerChangeEvent = function(/*forceTrigger*/) { - if (this.engine._batchMode) { return; } - var elements = this.engine.getDirtyNodes(true); // verify they really changed - if (elements && elements.length) { - this.engine._layoutsNodesChange(elements); - this._triggerEvent('change', elements); - } - this.engine._saveInitial(); // we called, now reset initial values & dirty flags - }; - - GridStack.prototype._triggerAddEvent = function() { - if (this.engine._batchMode) { return; } - if (this.engine._addedNodes && this.engine._addedNodes.length > 0) { - this.engine._layoutsNodesChange(this.engine._addedNodes); - // prevent added nodes from also triggering 'change' event (which is called next) - this.engine._addedNodes.forEach(function (n) { delete n._dirty; }); - this._triggerEvent('added', this.engine._addedNodes); - this.engine._addedNodes = []; - } - }; - - GridStack.prototype._triggerRemoveEvent = function() { - if (this.engine._batchMode) { return; } - if (this.engine._removedNodes && this.engine._removedNodes.length > 0) { - this._triggerEvent('removed', this.engine._removedNodes); - this.engine._removedNodes = []; - } - }; - - GridStack.prototype._triggerEvent = function(name, data) { - var event = new CustomEvent(name, {detail: data}); - this.el.dispatchEvent(event); - }; - - GridStack.prototype._initStyles = function() { - if (this._stylesId) { - Utils.removeStylesheet(this._stylesId); - } - this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); - // insert style to parent (instead of 'head') to support WebComponent - this._styles = Utils.createStylesheet(this._stylesId, this.el.parentNode); - if (this._styles !== null) { - this._styles._max = 0; - } - }; - - GridStack.prototype._updateStyles = function(maxHeight) { - if (this._styles === null || this._styles === undefined) { - return; - } - - var prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; - var self = this; - var getHeight; - - if (maxHeight === undefined) { - maxHeight = this._styles._max; - } - - this._initStyles(); - this._updateContainerHeight(); - if (!this.opts.cellHeight) { // The rest will be handled by CSS - return ; - } - if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep this._styles._max increasing - return ; - } - - if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - getHeight = function(nbRows, nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - }; - } else { - getHeight = function(nbRows, nbMargins) { - if (!nbRows || !nbMargins) { - return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) + - self.opts.cellHeightUnit; - } - return 'calc(' + ((self.opts.cellHeight * nbRows) + self.opts.cellHeightUnit) + ' + ' + - ((self.opts.verticalMargin * nbMargins) + self.opts.verticalMarginUnit) + ')'; - }; - } - - if (this._styles._max === 0) { - Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); - } - - if (maxHeight > this._styles._max) { - for (var i = this._styles._max; i < maxHeight; ++i) { - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-height="' + (i + 1) + '"]', - 'height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-min-height="' + (i + 1) + '"]', - 'min-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-max-height="' + (i + 1) + '"]', - 'max-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-y="' + i + '"]', - 'top: ' + getHeight(i, i) + ';', - i - ); - } - this._styles._max = maxHeight; - } - }; - - GridStack.prototype._updateContainerHeight = function() { - if (this.engine._batchMode) { return; } - var row = this.engine.getRow(); - if (row < this.opts.minRow) { - row = this.opts.minRow; - } - // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below - var cssMinHeight = parseInt(this.$el.css('min-height')); - if (cssMinHeight > 0) { - var verticalMargin = this.opts.verticalMargin; - var minRow = Math.round((cssMinHeight + verticalMargin) / (this.cellHeight() + verticalMargin)); - if (row < minRow) { - row = minRow; - } - } - this.$el.attr('data-gs-current-row', row); - if (!this.opts.cellHeight) { - return ; - } - if (!this.opts.verticalMargin) { - this.$el.css('height', (row * (this.opts.cellHeight)) + this.opts.cellHeightUnit); - } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - this.$el.css('height', (row * (this.opts.cellHeight + this.opts.verticalMargin) - - this.opts.verticalMargin) + this.opts.cellHeightUnit); - } else { - this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight)) + this.opts.cellHeightUnit) + - ' + ' + ((row * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')'); - } - }; - - GridStack.prototype._setupRemovingTimeout = function(el) { - var self = this; - var node = $(el).data('_gridstack_node'); - - if (node._removeTimeout || !self.opts.removable) { - return; - } - node._removeTimeout = setTimeout(function() { - el.addClass('grid-stack-item-removing'); - node._isAboutToRemove = true; - }, self.opts.removeTimeout); - }; - - GridStack.prototype._clearRemovingTimeout = function(el) { - var node = $(el).data('_gridstack_node'); - - if (!node._removeTimeout) { - return; - } - clearTimeout(node._removeTimeout); - node._removeTimeout = null; - el.removeClass('grid-stack-item-removing'); - node._isAboutToRemove = false; - }; - - GridStack.prototype._prepareElementsByNode = function(el, node) { - var self = this; - - var cellWidth; - var cellFullHeight; // internal cellHeight + v-margin - - var dragOrResize = function(event, ui) { - var x = Math.round(ui.position.left / cellWidth); - var y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight); - var width; - var height; - - if (event.type === 'drag') { - var distance = ui.position.top - node._prevYPix; - node._prevYPix = ui.position.top; - Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 || - (!self.engine.float && y > self.engine.getRow())) { - if (!node._temporaryRemoved) { - if (self.opts.removable === true) { - self._setupRemovingTimeout(el); - } - - x = node._beforeDragX; - y = node._beforeDragY; - - self.placeholder.detach(); - self.placeholder.hide(); - self.engine.removeNode(node); - self._updateContainerHeight(); - - node._temporaryRemoved = true; - } else { - return; - } - } else { - self._clearRemovingTimeout(el); - - if (node._temporaryRemoved) { - self.engine.addNode(node); - self.placeholder - .attr('data-gs-x', x) - .attr('data-gs-y', y) - .attr('data-gs-width', width) - .attr('data-gs-height', height) - .show(); - self.$el.append(self.placeholder); - node.el = self.placeholder.get(0); - node._temporaryRemoved = false; - } - } - } else if (event.type === 'resize') { - if (x < 0) return; - width = Math.round(ui.size.width / cellWidth); - height = Math.round((ui.size.height + self.verticalMargin()) / cellFullHeight); - } - // width and height are undefined if not resizing - var lastTriedWidth = width !== undefined ? width : node.lastTriedWidth; - var lastTriedHeight = height !== undefined ? height : node.lastTriedHeight; - if (!self.engine.canMoveNode(node, x, y, width, height) || - (node.lastTriedX === x && node.lastTriedY === y && - node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) { - return; - } - node.lastTriedX = x; - node.lastTriedY = y; - node.lastTriedWidth = width; - node.lastTriedHeight = height; - self.engine.moveNode(node, x, y, width, height); - self._updateContainerHeight(); - - if (event.type === 'resize') { - $(event.target).trigger('gsresize', node); - } - }; - - var onStartMoving = function(event, ui) { - self.$el.append(self.placeholder); - var o = $(this); - self.engine.cleanNodes(); - self.engine.beginUpdate(node); - cellWidth = self.cellWidth(); - var strictCellHeight = self.cellHeight(); // heigh without v-margin - // compute height with v-margin (Note: we add 1 margin as last row is missing it) - cellFullHeight = (self.$el.height() + self.verticalMargin()) / parseInt(self.$el.attr('data-gs-current-row')); - self.placeholder - .attr('data-gs-x', o.attr('data-gs-x')) - .attr('data-gs-y', o.attr('data-gs-y')) - .attr('data-gs-width', o.attr('data-gs-width')) - .attr('data-gs-height', o.attr('data-gs-height')) - .show(); - node.el = self.placeholder.get(0); - node._beforeDragX = node.x; - node._beforeDragY = node.y; - node._prevYPix = ui.position.top; - var minHeight = (node.minHeight || 1); - var verticalMargin = self.opts.verticalMargin; - - // mineHeight - Each row is cellHeight + verticalMargin, until last one which has no margin below - self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin); - - if (event.type === 'resizestart') { - o.find('.grid-stack-item').trigger('resizestart'); - } - }; - - var onEndMoving = function(event, ui) { - var o = $(this); - if (!o.data('_gridstack_node')) { - return; - } - - // var forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? - self.placeholder.detach(); - node.el = o.get(0); - self.placeholder.hide(); - - if (node._isAboutToRemove) { - // forceNotify = true; - var gridToNotify = el.data('_gridstack_node')._grid; - gridToNotify._triggerRemoveEvent(); - el.removeData('_gridstack_node'); - el.remove(); - } else { - self._clearRemovingTimeout(el); - if (!node._temporaryRemoved) { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - } else { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node._beforeDragX) - .attr('data-gs-y', node._beforeDragY) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); - node.x = node._beforeDragX; - node.y = node._beforeDragY; - node._temporaryRemoved = false; - self.engine.addNode(node); - } - } - self._updateContainerHeight(); - self._triggerChangeEvent(/*forceNotify*/); - - self.engine.endUpdate(); - - var nestedGrids = o.find('.grid-stack'); - if (nestedGrids.length && event.type === 'resizestop') { - nestedGrids.each(function(index, el) { - el.gridstack.onResizeHandler(); - }); - o.find('.grid-stack-item').trigger('resizestop'); - o.find('.grid-stack-item').trigger('gsresizestop'); - } - if (event.type === 'resizestop') { - self.$el.trigger('gsresizestop', o); - } - }; - - this.dd - .draggable(el, { - start: onStartMoving, - stop: onEndMoving, - drag: dragOrResize - }) - .resizable(el, { - start: onStartMoving, - stop: onEndMoving, - resize: dragOrResize - }); - - if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) { - this.dd.draggable(el, 'disable'); - } - - if (node.noResize || this.opts.disableResize || this.opts.staticGrid) { - this.dd.resizable(el, 'disable'); - } - - this._writeAttr(el, node); - }; - - GridStack.prototype._prepareElement = function(el, triggerAddEvent) { - triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false; - var self = this; - el = $(el); - - el.addClass(this.opts.itemClass); - var node = this._readAttr(el, {el: el.get(0), _grid: self}); - node = self.engine.addNode(node, triggerAddEvent); - el.data('_gridstack_node', node); - - this._prepareElementsByNode(el, node); - }; - - /** call to write any default attributes back to element */ - GridStack.prototype._writeAttr = function(el, node) { - el = $(el); - node = node || {}; - // Note: passing null removes the attr in jquery - if (node.x !== undefined) { el.attr('data-gs-x', node.x); } - if (node.y !== undefined) { el.attr('data-gs-y', node.y); } - if (node.width !== undefined) { el.attr('data-gs-width', node.width); } - if (node.height !== undefined) { el.attr('data-gs-height', node.height); } - if (node.autoPosition !== undefined) { el.attr('data-gs-auto-position', node.autoPosition ? true : null); } - if (node.minWidth !== undefined) { el.attr('data-gs-min-width', node.minWidth); } - if (node.maxWidth !== undefined) { el.attr('data-gs-max-width', node.maxWidth); } - if (node.minHeight !== undefined) { el.attr('data-gs-min-height', node.minHeight); } - if (node.maxHeight !== undefined) { el.attr('data-gs-max-height', node.maxHeight); } - if (node.noResize !== undefined) { el.attr('data-gs-no-resize', node.noResize ? true : null); } - if (node.noMove !== undefined) { el.attr('data-gs-no-move', node.noMove ? true : null); } - if (node.locked !== undefined) { el.attr('data-gs-locked', node.locked ? true : null); } - if (node.resizeHandles !== undefined) { el.attr('data-gs-resize-handles', node.resizeHandles); } - if (node.id !== undefined) { el.attr('data-gs-id', node.id); } - }; - - /** call to write any default attributes back to element */ - GridStack.prototype._readAttr = function(el, node) { - el = $(el); - node = node || {}; - node.x = el.attr('data-gs-x'); - node.y = el.attr('data-gs-y'); - node.width = el.attr('data-gs-width'); - node.height = el.attr('data-gs-height'); - node.autoPosition = Utils.toBool(el.attr('data-gs-auto-position')); - node.maxWidth = el.attr('data-gs-max-width'); - node.minWidth = el.attr('data-gs-min-width'); - node.maxHeight = el.attr('data-gs-max-height'); - node.minHeight = el.attr('data-gs-min-height'); - node.noResize = Utils.toBool(el.attr('data-gs-no-resize')); - node.noMove = Utils.toBool(el.attr('data-gs-no-move')); - node.locked = Utils.toBool(el.attr('data-gs-locked')); - node.resizeHandles = el.attr('data-gs-resize-handles'); - node.id = el.attr('data-gs-id'); - return node; - }; - - GridStack.prototype.setAnimation = function(enable) { - if (enable) { - this.$el.addClass('grid-stack-animate'); - } else { - this.$el.removeClass('grid-stack-animate'); - } - }; - - GridStack.prototype.addWidget = function(el, opt, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id) { - - // new way of calling with an object - make sure all items have been properly initialized - if (opt === undefined || typeof opt === 'object') { - // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos - // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. - // opt = this.engine._prepareNode(opt); - } else { - // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) - return this.addWidget(el, {x: opt, y: y, width: width, height: height, autoPosition: autoPosition, - minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id}); - } - - el = $(el); - if (opt) { // see knockout above - this.engine._prepareNode(opt); - } - this._writeAttr(el, opt); - this.$el.append(el); - return this.makeWidget(el); - }; - - GridStack.prototype.makeWidget = function(el) { - el = $(el); - this._prepareElement(el, true); - this._updateContainerHeight(); - this._triggerAddEvent(); - this._triggerChangeEvent(true); // trigger any other changes - - return el.get(0); - }; - - GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) { - var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; - return this.engine.canBePlacedWithRespectToHeight(node); - }; - - GridStack.prototype.removeWidget = function(el, detachNode) { - detachNode = (detachNode === undefined ? true : detachNode); - el = $(el); - var node = el.data('_gridstack_node'); - // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 - if (!node) { - node = this.engine.getNodeDataByDOMEl(el.get(0)); - } - - el.removeData('_gridstack_node'); - this.engine.removeNode(node, detachNode); - this._triggerRemoveEvent(); - this._triggerChangeEvent(true); // trigger any other changes - }; - - GridStack.prototype.removeAll = function(detachNode) { - if (detachNode !== false) { - // remove our data structure before list gets emptied and DOM elements stay behind - this.engine.nodes.forEach(function(node) { $(node.el).removeData('_gridstack_node') }); - } - this.engine.removeAll(detachNode); - this._triggerRemoveEvent(); - }; - - GridStack.prototype.destroy = function(detachGrid) { - $(window).off('resize', this.onResizeHandler); - this.disable(); - if (detachGrid !== undefined && !detachGrid) { - this.removeAll(false); - delete this.$el.get(0).gridstack; - } else { - this.$el.remove(); - } - Utils.removeStylesheet(this._stylesId); - if (this.engine) { - this.engine = null; - } - }; - - GridStack.prototype.resizable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - node.noResize = !(val || false); - if (node.noResize) { - self.dd.resizable(el, 'disable'); - } else { - self.dd.resizable(el, 'enable'); - } - }); - return this; - }; - - GridStack.prototype.movable = function(el, val) { - var self = this; - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - node.noMove = !(val || false); - if (node.noMove) { - self.dd.draggable(el, 'disable'); - el.removeClass('ui-draggable-handle'); - } else { - self.dd.draggable(el, 'enable'); - el.addClass('ui-draggable-handle'); - } - }); - return this; - }; - - GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) { - this.movable(this.$el.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableDrag = !doEnable; - } - }; - - GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) { - this.resizable(this.$el.children('.' + this.opts.itemClass), doEnable); - if (includeNewWidgets) { - this.opts.disableResize = !doEnable; - } - }; - - GridStack.prototype.disable = function() { - this.movable(this.$el.children('.' + this.opts.itemClass), false); - this.resizable(this.$el.children('.' + this.opts.itemClass), false); - this.$el.trigger('disable'); - }; - - GridStack.prototype.enable = function() { - this.movable(this.$el.children('.' + this.opts.itemClass), true); - this.resizable(this.$el.children('.' + this.opts.itemClass), true); - this.$el.trigger('enable'); - }; - - GridStack.prototype.locked = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - node.locked = (val || false); - el.attr('data-gs-locked', node.locked ? 'yes' : null); - }); - return this; - }; - - GridStack.prototype.maxHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - if (!isNaN(val)) { - node.maxHeight = (val || false); - el.attr('data-gs-max-height', val); - } - }); - return this; - }; - - GridStack.prototype.minHeight = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - if (!isNaN(val)) { - node.minHeight = (val || false); - el.attr('data-gs-min-height', val); - } - }); - return this; - }; - - GridStack.prototype.maxWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - if (!isNaN(val)) { - node.maxWidth = (val || false); - el.attr('data-gs-max-width', val); - } - }); - return this; - }; - - GridStack.prototype.minWidth = function(el, val) { - el = $(el); - el.each(function(index, el) { - el = $(el); - var node = el.data('_gridstack_node'); - if (!node) { return; } - if (!isNaN(val)) { - node.minWidth = (val || false); - el.attr('data-gs-min-width', val); - } - }); - return this; - }; - - GridStack.prototype._updateElement = function(el, callback) { - el = $(el).first(); - var node = el.data('_gridstack_node'); - if (!node) { return; } - var self = this; - - self.engine.cleanNodes(); - self.engine.beginUpdate(node); - - callback.call(this, el, node); - - self._updateContainerHeight(); - self._triggerChangeEvent(); - - self.engine.endUpdate(); - }; - - GridStack.prototype.resize = function(el, width, height) { - this._updateElement(el, function(el, node) { - width = (width !== null && width !== undefined) ? width : node.width; - height = (height !== null && height !== undefined) ? height : node.height; - - this.engine.moveNode(node, node.x, node.y, width, height); - }); - }; - - GridStack.prototype.move = function(el, x, y) { - this._updateElement(el, function(el, node) { - x = (x !== null && x !== undefined) ? x : node.x; - y = (y !== null && y !== undefined) ? y : node.y; - - this.engine.moveNode(node, x, y, node.width, node.height); - }); - }; - - GridStack.prototype.update = function(el, x, y, width, height) { - this._updateElement(el, function(el, node) { - x = (x !== null && x !== undefined) ? x : node.x; - y = (y !== null && y !== undefined) ? y : node.y; - width = (width !== null && width !== undefined) ? width : node.width; - height = (height !== null && height !== undefined) ? height : node.height; - - this.engine.moveNode(node, x, y, width, height); - }); - }; - - /** - * relayout grid items to reclaim any empty space - */ - GridStack.prototype.compact = function() { - if (this.engine.nodes.length === 0) { return; } - this.batchUpdate(); - this.engine._sortNodes(); - var nodes = this.engine.nodes; - this.engine.nodes = []; // pretend we have no nodes to conflict layout to start with... - nodes.forEach(function(node) { - if (!node.noMove && !node.locked) { - node.autoPosition = true; - } - this.engine.addNode(node, false); // 'false' for add event trigger - node._dirty = true; // force attr update - }, this); - this.commit(); - }; - - GridStack.prototype.verticalMargin = function(val, noUpdate) { - if (val === undefined) { - return this.opts.verticalMargin; - } - - var heightData = Utils.parseHeight(val); - - if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) { - return ; - } - this.opts.verticalMarginUnit = heightData.unit; - this.opts.verticalMargin = heightData.height; - - if (!noUpdate) { - this._updateStyles(); - } - }; - - /** set/get the current cell height value */ - GridStack.prototype.cellHeight = function(val, noUpdate) { - // getter - returns the opts stored height else compute it... - if (val === undefined) { - if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') { - return this.opts.cellHeight; - } - // compute the height taking margin into account (each row has margin other than last one) - var o = this.$el.children('.' + this.opts.itemClass).first(); - var height = o.attr('data-gs-height'); - var verticalMargin = this.opts.verticalMargin; - return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); - } - - // setter - updates the cellHeight value if they changed - var heightData = Utils.parseHeight(val); - if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { - return ; - } - this.opts.cellHeightUnit = heightData.unit; - this.opts.cellHeight = heightData.height; - - if (!noUpdate) { - this._updateStyles(); - } - }; - - GridStack.prototype.cellWidth = function() { - // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) - return Math.round(this.$el.outerWidth() / this.opts.column); - }; - - GridStack.prototype.getCellFromPixel = function(position, useOffset) { - var containerPos = (useOffset !== undefined && useOffset) ? - this.$el.offset() : this.$el.position(); - var relativeLeft = position.left - containerPos.left; - var relativeTop = position.top - containerPos.top; - - var columnWidth = Math.floor(this.$el.width() / this.opts.column); - var rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row'))); - - return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; - }; - - GridStack.prototype.batchUpdate = function() { - this.engine.batchUpdate(); - }; - - GridStack.prototype.commit = function() { - this.engine.commit(); - this._triggerRemoveEvent(); - this._triggerAddEvent(); - this._triggerChangeEvent(); - }; - - GridStack.prototype.isAreaEmpty = function(x, y, width, height) { - return this.engine.isAreaEmpty(x, y, width, height); - }; - - GridStack.prototype.setStatic = function(staticValue) { - this.opts.staticGrid = (staticValue === true); - this.enableMove(!staticValue); - this.enableResize(!staticValue); - this._setStaticClass(); - }; - - GridStack.prototype._setStaticClass = function() { - var staticClassName = 'grid-stack-static'; - - if (this.opts.staticGrid === true) { - this.$el.addClass(staticClassName); - } else { - this.$el.removeClass(staticClassName); - } - }; - - /** called whenever a node is added or moved - updates the cached layouts */ - GridStackEngine.prototype._layoutsNodesChange = function(nodes) { - if (!this._layouts || this._ignoreLayoutsNodeChange) return; - // remove smaller layouts - we will re-generate those on the fly... larger ones need to update - this._layouts.forEach(function(layout, column) { - if (!layout || column === this.column) return; - if (column < this.column) { - this._layouts[column] = undefined; - } - else { - // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better. - // Note: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. - nodes.forEach(function(node) { - var n = layout.find(function(l) { return l._id === node._id }); - if (!n) return; // no cache for new nodes. Will use those values. - var ratio = column / this.column; - // Y changed, push down same amount - // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode) - if (node.y !== node._origY) { - n.y += (node.y - node._origY); - } - // X changed, scale from new position - if (node.x !== node._origX) { - n.x = Math.round(node.x * ratio); - } - // width changed, scale from new width - if (node.width !== node._origW) { - n.width = Math.round(node.width * ratio); - } - // ...height always carries over from cache - }, this); - } - }, this); - } - - /** - * Called to scale the widget width & position up/down based on the column change. - * Note we store previous layouts (especially original ones) to make it possible to go - * from say 12 -> 1 -> 12 and get back to where we were. - * - * oldColumn: previous number of columns - * column: new column number - * nodes?: different sorted list (ex: DOM order) instead of current list - */ - GridStackEngine.prototype._updateNodeWidths = function(oldColumn, column, nodes) { - if (!this.nodes.length || oldColumn === column) { return; } - - // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data - var copy = [this.nodes.length]; - this.nodes.forEach(function(n, i) {copy[i] = {x: n.x, y: n.y, width: n.width, _id: n._id}}); // only thing we change is x,y,w and id to find it back - this._layouts = this._layouts || []; // use array to find larger quick - this._layouts[oldColumn] = copy; - - // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout - if (column === 1 && nodes && nodes.length) { - var top = 0; - nodes.forEach(function(n) { - n.x = 0; - n.width = 1; - n.y = Math.max(n.y, top); - top = n.y + n.height; - }); - } else { - nodes = Utils.sort(this.nodes, -1, oldColumn); // current column reverse sorting so we can insert last to front (limit collision) - } - - // see if we have cached previous layout. - var cacheNodes = this._layouts[column] || []; - // if not AND we are going up in size start with the largest layout as down-scaling is more accurate - var lastIndex = this._layouts.length - 1; - if (cacheNodes.length === 0 && column > oldColumn && column < lastIndex) { - cacheNodes = this._layouts[lastIndex] || []; - if (cacheNodes.length) { - // pretend we came from that larger column by assigning those values as starting point - oldColumn = lastIndex; - cacheNodes.forEach(function(cacheNode) { - var j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id}); - if (j !== -1) { - // still current, use cache info positions - nodes[j].x = cacheNode.x; - nodes[j].y = cacheNode.y; - nodes[j].width = cacheNode.width; - } - }); - cacheNodes = []; // we still don't have new column cached data... will generate from larger one. - } - } - - // if we found cache re-use those nodes that are still current - var newNodes = []; - cacheNodes.forEach(function(cacheNode) { - var j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id}); - if (j !== -1) { - // still current, use cache info positions - nodes[j].x = cacheNode.x; - nodes[j].y = cacheNode.y; - nodes[j].width = cacheNode.width; - newNodes.push(nodes[j]); - nodes[j] = null; // erase it so we know what's left - } - }); - // ...and add any extra non-cached ones - var ratio = column / oldColumn; - nodes.forEach(function(node) { - if (!node) return; - node.x = (column === 1 ? 0 : Math.round(node.x * ratio)); - node.width = ((column === 1 || oldColumn === 1) ? 1 : (Math.round(node.width * ratio) || 1)); - newNodes.push(node); - }); - - // finally relayout them in reverse order (to get correct placement) - newNodes = Utils.sort(newNodes, -1, column); - this._ignoreLayoutsNodeChange = true; - this.batchUpdate(); - this.nodes = []; // pretend we have no nodes to start with (we use same structures) to simplify layout - newNodes.forEach(function(node) { - this.addNode(node, false); // 'false' for add event trigger - node._dirty = true; // force attr update - }, this); - this.commit(); - delete this._ignoreLayoutsNodeChange; - } - - /** called to save initial position/size */ - GridStackEngine.prototype._saveInitial = function() { - this.nodes.forEach(function(n) { - n._origX = n.x; - n._origY = n.y; - n._origW = n.width; - n._origH = n.height; - delete n._dirty; - }); - } - - /** - * set/get number of columns in the grid. Will attempt to update existing widgets - * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [2-11], - * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) - * @param column - Integer > 0 (default 12). - * @param doNotPropagate if true existing widgets will not be updated (optional) - */ - GridStack.prototype.column = function(column, doNotPropagate) { - // getter - returns the opts stored mode - if (column === undefined) { - return this.opts.column; - } - // setter - if (this.opts.column === column) { return; } - var oldColumn = this.opts.column; - - // if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on) - // then remember the original columns so we can restore. - if (column === 1) { - this._prevColumn = oldColumn; - } else { - delete this._prevColumn; - } - - this.$el.removeClass('grid-stack-' + oldColumn); - this.$el.addClass('grid-stack-' + column); - this.opts.column = this.engine.column = column; - - if (doNotPropagate === true) { return; } - - // update the items now - see if the dom order nodes should be passed instead (else default to current list) - var domNodes; - if (this.opts.oneColumnModeDomSort && column === 1) { - domNodes = []; - this.$el.children('.' + this.opts.itemClass).each(function(index, el) { - var node = $(el).data('_gridstack_node'); - if (node) { domNodes.push(node); } - }); - if (!domNodes.length) { domNodes = undefined; } - } - this.engine._updateNodeWidths(oldColumn, column, domNodes); - - // and trigger our event last... - this.engine._ignoreLayoutsNodeChange = true; - this._triggerChangeEvent(); - delete this.engine._ignoreLayoutsNodeChange; - }; - - GridStack.prototype.float = function(val) { - // getter - returns the opts stored mode - if (val === undefined) { - return this.opts.float || false; - } - // setter - updates the mode and relayout if gravity is back on - if (this.opts.float === val) { return; } - this.opts.float = this.engine.float = val || false; - if (!val) { - this.engine._packNodes(); - this.engine._notify(); - this._triggerChangeEvent(); - } - }; - - GridStack.prototype.getRow = function() { - return this.engine.getRow(); - } - - /** Event handler that extracts our CustomEvent data out automatically for receiving custom - * notifications (see doc for supported events) - */ - GridStack.prototype.on = function(eventName, callback) { - // check for array of names being passed instead - if (eventName.indexOf(' ') !== -1) { - var names = eventName.split(' '); - names.forEach(function(name) { this.on(name, callback) }, this); - return; - } - - if (eventName === 'change' || eventName === 'added' || eventName === 'removed') { - // native CustomEvent handlers - cash the generic handlers so we can remove - this._gsEventHandler = this._gsEventHandler || {}; - this._gsEventHandler[eventName] = function(event) { callback(event, event.detail) }; - this.el.addEventListener(eventName, this._gsEventHandler[eventName]); - } else { - // still JQuery events - this.$el.on(eventName, callback); - } - } - - /** unsubscribe from the 'on' event */ - GridStack.prototype.off = function(eventName) { - // check for array of names being passed instead - if (eventName.indexOf(' ') !== -1) { - var names = eventName.split(' '); - names.forEach(function(name) { this.off(name, callback) }, this); - return; - } - - if (eventName === 'change' || eventName === 'added' || eventName === 'removed') { - // remove native CustomEvent handlers - if (this._gsEventHandler && this._gsEventHandler[eventName]) { - this.el.removeEventListener(eventName, this._gsEventHandler[eventName]); - delete this._gsEventHandler[eventName]; - } - } else { - // still JQuery events - this.$el.off(eventName); - } - } - - // legacy method renames - GridStack.prototype.setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); - GridStack.prototype.setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); - GridStackEngine.prototype.getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); - - scope.GridStack = GridStack; - scope.GridStack.Utils = Utils; - scope.GridStack.Engine = GridStackEngine; - scope.GridStack.DragDropPlugin = GridStackDragDropPlugin; - - /** - * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will - * simply return the existing instance (ignore any passed options). - */ - GridStack.init = function(opts, elOrString) { - if (!elOrString) { elOrString = '.grid-stack' } - var el = $(elOrString).get(0); - if (!el) return; - if (!el.gridstack) { - el.gridstack = new GridStack(el, opts); - } - return el.gridstack - }; - - /** - * Will initialize a list of elements (given a selector) and return an array of grids. - */ - GridStack.initAll = function(opts, selector) { - if (!selector) { selector = '.grid-stack' } - var grids = []; - $(selector).each(function(index, el) { - if (!el.gridstack) { - el.gridstack = new GridStack(el, opts); - } - grids.push(el.gridstack); - }); - return grids; - }; - - return scope.GridStack; -}); diff --git a/src/gridstack.scss b/src/gridstack.scss index 07be076d0..a699197da 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 1.1.0-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 2.0.0-rc CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts new file mode 100644 index 000000000..f298c4958 --- /dev/null +++ b/src/gridstack.ts @@ -0,0 +1,1586 @@ +// gridstack.ts 2.0.0-rc @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +import { GridStackEngine } from './gridstack-engine' +import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils'; +import { GridStackElement, GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; +import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin'; + +// TODO: TEMPORARY until we remove all jquery calls +// also see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs +import * as $ from './jquery.js'; + +export interface GridHTMLElement extends HTMLElement { + gridstack?: GridStack; // grid's parent DOM element points back to grid class +} +export type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' | + 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop'; + +/** Defines the coordinates of an object */ +export interface MousePosition { + top: number; + left: number; +} + +/** Defines the position of a cell inside the grid*/ +export interface CellPosition { + x: number; + y: number; +} + +interface GridCSSStyleSheet extends CSSStyleSheet { + _max?: number; // internal tracker of the max # of rows we created +} + +/** + * Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid. + * Note: your grid elements MUST have the following classes for the CSS layout to work: + * @example + *
    + *
    + *
    Item 1
    + *
    + *
    + */ +export class GridStack { + + /** + * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will + * simply return the existing instance (ignore any passed options). There is also an initAll() version that support + * multiple grids initialization at once. + * @param options grid options (optional) + * @param elOrString element to convert to a grid (default to '.grid-stack' class selector) + * + * @example + * const grid = GridStack.init(); + * + * Note: the HTMLElement (of type GridHTMLElement) will store a `gridstack: GridStack` value that can be retrieve later + * const grid = document.querySelector('.grid-stack').gridstack; + */ + public static init(options?: GridstackOptions, elOrString: GridStackElement = '.grid-stack'): GridStack { + const el: GridHTMLElement = (typeof elOrString === 'string' ? document.querySelector(elOrString) : elOrString); + if (!el) { + if (typeof elOrString === 'string') { + console.error('gridstack.js: init() no grid was found. Did you forget class ' + elOrString + ' on your element ?'); + console.error('".grid-stack" is required for proper CSS styling and drag/drop.'); + } else { + console.error('gridstack.js: init() no grid element was passed.'); + } + return; + } + if (!el.gridstack) { + el.gridstack = new GridStack(el, options); + } + return el.gridstack + } + + /** + * Will initialize a list of elements (given a selector) and return an array of grids. + * @param options grid options (optional) + * @param selector element to convert to grids (default to '.grid-stack' class selector) + * + * @example + * const grids = GridStack.initAll(); + * grids.forEach(...) + */ + public static initAll(options?: GridstackOptions, selector = '.grid-stack'): GridStack[] { + const grids: GridStack[] = []; + document.querySelectorAll(selector).forEach((el: GridHTMLElement) => { + if (!el.gridstack) { + el.gridstack = new GridStack(el, options); + } + grids.push(el.gridstack); + }); + if (grids.length === 0) { + console.error('gridstack.js: initAll() no grid was found. Did you forget class ' + selector + ' on your element ?'); + console.error('".grid-stack" is required for proper CSS styling and drag/drop.'); + } + return grids; + } + + /** the HTML element tied to this grid after it's been initialized */ + public el: GridHTMLElement; + + /** engine used to implement non DOM grid functionality */ + public engine: GridStackEngine; + + /** grid options - public for classes to access, but use methods to modify! */ + public opts: GridstackOptions; + + /** @internal */ + private $el: JQuery; // TODO: legacy code + private $placeholder: JQuery; + private oneColumnMode: boolean; + private dd: GridStackDragDropPlugin; + private _prevColumn: number; + private _stylesId: string; + private _gsEventHandler: {}; + private _styles: GridCSSStyleSheet; + private isAutoCellHeight: boolean; + + /** + * Construct a grid item from the given element and options + * @param el + * @param opts + */ + public constructor(el: GridStackElement, opts: GridstackOptions) { + opts = opts || {}; + + this.$el = $(el); // legacy code + this.el = this.$el.get(0); // exposed HTML element to the user + + obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); + obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); + obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead'); + + // container attributes + obsoleteAttr(this.el, 'data-gs-width', 'data-gs-column', 'v0.5.3'); + obsoleteAttr(this.el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3'); + obsoleteAttr(this.el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0'); + + opts.itemClass = opts.itemClass || 'grid-stack-item'; + + // if row property exists, replace minRow and maxRow instead + if (opts.row) { + opts.minRow = opts.maxRow = opts.row; + delete opts.row; + } + const rowAttr = parseInt(this.$el.attr('data-gs-row')); + + // elements attributes override any passed options (like CSS style) - merge the two together + const defaults: GridstackOptions = { + column: parseInt(this.$el.attr('data-gs-column')) || 12, + minRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-min-row')) || 0, + maxRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-max-row')) || 0, + itemClass: 'grid-stack-item', + placeholderClass: 'grid-stack-placeholder', + placeholderText: '', + handle: '.grid-stack-item-content', + handleClass: null, + cellHeight: 60, + verticalMargin: 20, + auto: true, + minWidth: 768, + float: false, + staticGrid: false, + _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), + animate: Boolean(this.$el.attr('data-gs-animate')) || false, + alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, + resizable: Utils.defaults(opts.resizable || {}, { + autoHide: !(opts.alwaysShowResizeHandle || false), + handles: 'se' + }), + draggable: Utils.defaults(opts.draggable || {}, { + handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || + '.grid-stack-item-content', + scroll: false, + appendTo: 'body' + }), + disableDrag: opts.disableDrag || false, + disableResize: opts.disableResize || false, + rtl: 'auto', + removable: false, + removableOptions: Utils.defaults(opts.removableOptions || {}, { + accept: '.' + opts.itemClass + }), + removeTimeout: 2000, + verticalMarginUnit: 'px', + cellHeightUnit: 'px', + disableOneColumnMode: opts.disableOneColumnMode || false, + oneColumnModeDomSort: opts.oneColumnModeDomSort, + ddPlugin: null + }; + this.opts = Utils.defaults(opts, defaults); + + if (this.opts.ddPlugin === false) { + this.opts.ddPlugin = GridStackDragDropPlugin; + } else if (this.opts.ddPlugin === null) { + this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; + } + + this.dd = new this.opts.ddPlugin(this); + + if (this.opts.rtl === 'auto') { + this.opts.rtl = this.$el.css('direction') === 'rtl'; + } + + if (this.opts.rtl) { + this.$el.addClass('grid-stack-rtl'); + } + + this.opts._isNested = this.$el.closest('.' + opts.itemClass).length > 0; + if (this.opts._isNested) { + this.$el.addClass('grid-stack-nested'); + } + + this.isAutoCellHeight = (this.opts.cellHeight === 'auto'); + if (this.isAutoCellHeight) { + // make the cell square initially + this.cellHeight(this.cellWidth(), true); + } else { + this.cellHeight(this.opts.cellHeight, true); + } + this.verticalMargin(this.opts.verticalMargin, true); + + this.$el.addClass(this.opts._class); + + this._setStaticClass(); + + this._initStyles(); + + this.engine = new GridStackEngine(this.opts.column, (cbNodes, detachNode) => { + detachNode = (detachNode === undefined ? true : detachNode); + let maxHeight = 0; + this.engine.nodes.forEach(n => { maxHeight = Math.max(maxHeight, n.y + n.height) }); + cbNodes.forEach(n => { + if (detachNode && n._id === null) { + if (n.el) { $(n.el).remove() } + } else { + $(n.el) + .attr('data-gs-x', n.x) + .attr('data-gs-y', n.y) + .attr('data-gs-width', n.width) + .attr('data-gs-height', n.height); + } + }); + this._updateStyles(maxHeight + 10); + }, + this.opts.float, + this.opts.maxRow); + + if (this.opts.auto) { + const elements = []; + const _this = this; + this.$el.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')') + .each((index, el) => { + const x = parseInt(el.getAttribute('data-gs-x')); + const y = parseInt(el.getAttribute('data-gs-y')); + elements.push({ + el: el, + // if x,y are missing (autoPosition) add them to end of list - but keep their respective DOM order + i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * _this.opts.column + }); + }); + Utils.sortBy(elements, x => x.i).forEach( item => { this._prepareElement(item.el) }); + } + this.engine._saveInitial(); // initial start of items + + this.setAnimation(this.opts.animate); + + this.$placeholder = $( + '
    ' + + '
    ' + this.opts.placeholderText + '
    ').hide(); + + this._updateContainerHeight(); + + $(window).resize(this.onResizeHandler); + this.onResizeHandler(); + + if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { + const trashZone = $(this.opts.removable); + if (!this.dd.isDroppable(trashZone)) { + this.dd.droppable(trashZone, this.opts.removableOptions); + } + this.dd + .on(trashZone, 'dropover', (event, ui) => { + const el = $(ui.draggable); + const node = el.get(0).gridstackNode; + if (!node || node._grid !== this) { + return; + } + el.data('inTrashZone', true); + this._setupRemovingTimeout(el); + }) + .on(trashZone, 'dropout', (event, ui) => { + const el = $(ui.draggable); + const node = el.get(0).gridstackNode; + if (!node || node._grid !== this) { + return; + } + el.data('inTrashZone', false); + this._clearRemovingTimeout(el); + }); + } + + this.setupAcceptWidget(); + }; + + + /** + * Creates new widget and returns it. + * + * Widget will be always placed even if result height is more than actual grid height. + * You need to use willItFit method before calling addWidget for additional check. + * See also `makeWidget()`. + * + * @example + * const grid = GridStack.init(); + * grid.addWidget(el, {width: 3, autoPosition: true}); + * + * @param el widget to add + * @param options widget position/size options (optional) + */ + public addWidget(el: GridStackElement, options? : GridstackWidget): HTMLElement; + + /** + * Creates new widget and returns it. + * Legacy: Spelled out version of the widgets options, recommend use new version instead. + * + * @example + * const grid = GridStack.init(); + * grid.addWidget(el, 0, 0, 3, 2, true); + * + * @param el widget to add + * @param x widget position x (optional) + * @param y widget position y (optional) + * @param width widget dimension width (optional) + * @param height widget dimension height (optional) + * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (optional) + * @param minWidth minimum width allowed during resize/creation (optional) + * @param maxWidth maximum width allowed during resize/creation (optional) + * @param minHeight minimum height allowed during resize/creation (optional) + * @param maxHeight maximum height allowed during resize/creation (optional) + * @param id value for `data-gs-id` (optional) + */ + public addWidget(el: GridStackElement, x? : number | GridstackWidget, y?: number, width?: number, height?: number, autoPosition?: boolean, + minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number, id?: numberOrString): HTMLElement { + // new way of calling with an object - make sure all items have been properly initialized + if (x === undefined || typeof x === 'object') { + // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos + // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. + // opt = this.engine._prepareNode(opt); + x = x || {}; + } else { + // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) + return this.addWidget(el, {x: x, y: y, width: width, height: height, autoPosition: autoPosition, + minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id}); + } + + const $el = $(el); + this._writeAttr(el, x); + this.$el.append(el); + return this.makeWidget(el); + } + + /** + * Initializes batch updates. You will see no changes until `commit()` method is called. + */ + public batchUpdate() { + this.engine.batchUpdate(); + } + + /** + * Gets current cell height. + */ + public getCellHeight(): number { + if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') { + return this.opts.cellHeight as number; + } + // compute the height taking margin into account (each row has margin other than last one) + const o = this.$el.children('.' + this.opts.itemClass).first(); + const height = parseInt(o.attr('data-gs-height')); + const verticalMargin = this.opts.verticalMargin as number; + return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); + } + + /** + * Update current cell height - see `GridstackOptions.cellHeight` for format. + * This method rebuilds an internal CSS style sheet. + * Note: You can expect performance issues if call this method too often. + * + * @param val the cell height + * @param noUpdate (Optional) if true, styles will not be updated + * + * @example + * grid.cellHeight(grid.cellWidth() * 1.2); + */ + public cellHeight(val: numberOrString, noUpdate?: boolean) { + const heightData = Utils.parseHeight(val); + if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { + return ; + } + this.opts.cellHeightUnit = heightData.unit; + this.opts.cellHeight = heightData.height; + + if (!noUpdate) { + this._updateStyles(); + } + } + + /** + * Gets current cell width. + */ + public cellWidth(): number { + // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) + return Math.round(this.$el.outerWidth() / this.opts.column); + } + + /** + * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate. + */ + public commit() { + this.engine.commit(); + this._triggerRemoveEvent(); + this._triggerAddEvent(); + this._triggerChangeEvent(); + }; + + /** re-layout grid items to reclaim any empty space */ + public compact() { + this.engine.compact(); + this._triggerChangeEvent(); + } + + /** + * set the number of columns in the grid. Will update existing widgets to conform to new number of columns, + * as well as cache the original layout so you can revert back to previous positions without loss. + * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], + * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) + * @param column - Integer > 0 (default 12). + * @param doNotPropagate if true existing widgets will not be updated (optional) + */ + public column(column: number, doNotPropagate?: boolean) { + if (this.opts.column === column) { return; } + const oldColumn = this.opts.column; + + // if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on) + // then remember the original columns so we can restore. + if (column === 1) { + this._prevColumn = oldColumn; + } else { + delete this._prevColumn; + } + + this.$el.removeClass('grid-stack-' + oldColumn); + this.$el.addClass('grid-stack-' + column); + this.opts.column = this.engine.column = column; + + if (doNotPropagate === true) { return; } + + // update the items now - see if the dom order nodes should be passed instead (else default to current list) + let domNodes; + if (this.opts.oneColumnModeDomSort && column === 1) { + domNodes = []; + this.$el.children('.' + this.opts.itemClass).each((index, el: GridItemHTMLElement) => { + const node = el.gridstackNode; + if (node) { domNodes.push(node); } + }); + if (!domNodes.length) { domNodes = undefined; } + } + this.engine._updateNodeWidths(oldColumn, column, domNodes); + + // and trigger our event last... + this._triggerChangeEvent(true); // skip layout update + } + + /** + * get the number of columns in the grid (default 12) + */ + public getColumn(): number { + return this.opts.column; + } + + /** + * Destroys a grid instance. + * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). + */ + public destroy(detachGrid?: boolean) { + $(window).off('resize', this.onResizeHandler); + this.disable(); + if (detachGrid !== undefined && !detachGrid) { + this.removeAll(false); + delete this.el.gridstack; + } else { + this.$el.remove(); + } + Utils.removeStylesheet(this._stylesId); + if (this.engine) { + this.engine = null; + } + } + + /** + * Disables widgets moving/resizing. This is a shortcut for: + * @example + * grid.enableMove(false); + * grid.enableResize(false); + */ + public disable() { + this.enableMove(false); + this.enableResize(false); + this.$el.trigger('disable'); + } + + /** + * Enables widgets moving/resizing. This is a shortcut for: + * @example + * grid.enableMove(true); + * grid.enableResize(true); + */ + public enable() { + this.enableMove(true); + this.enableResize(true); + this.$el.trigger('enable'); + } + + /** + * Enables/disables widget moving. + * + * @param doEnable + * @param includeNewWidgets will force new widgets to be draggable as per + * doEnable`s value by changing the disableDrag grid option (default: true). + */ + public enableMove(doEnable: boolean, includeNewWidgets = true) { + this.$el.children('.' + this.opts.itemClass).each((index, el) => { + this.movable(el, doEnable); + }) + if (includeNewWidgets) { + this.opts.disableDrag = !doEnable; + } + } + + /** + * Enables/disables widget resizing + * @param doEnable + * @param includeNewWidgets will force new widgets to be draggable as per + * doEnable`s value by changing the disableResize grid option (default: true). + */ + public enableResize(doEnable: boolean, includeNewWidgets = true) { + this.$el.children('.' + this.opts.itemClass).each((index, el) => { + this.resizable(el, doEnable); + }) + if (includeNewWidgets) { + this.opts.disableResize = !doEnable; + } + } + + /** + * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) + */ + public float(val: boolean) { + this.engine.float = val; + this._triggerChangeEvent(); + } + + /** + * get the current float mode + */ + public getFloat(): boolean { + return this.engine.float || false; + } + + /** + * Get the position of the cell under a pixel on screen. + * @param position the position of the pixel to resolve in + * absolute coordinates, as an object with top and left properties + * @param useOffset if true, value will be based on offset vs position (Optional. Default false). + * Useful when grid is within `position: relative` element + * + * Returns an object with properties `x` and `y` i.e. the column and row in the grid. + */ + public getCellFromPixel(position: MousePosition, useOffset?: boolean): CellPosition { + const containerPos = (useOffset !== undefined && useOffset) ? + this.$el.offset() : this.$el.position(); + const relativeLeft = position.left - containerPos.left; + const relativeTop = position.top - containerPos.top; + + const columnWidth = Math.floor(this.$el.width() / this.opts.column); + const rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row'))); + + return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; + } + + /** returns the current number of rows */ + public getRow(): number { + return this.engine.getRow(); + } + + /** + * Checks if specified area is empty. + * @param x the position x. + * @param y the position y. + * @param width the width of to check + * @param height the height of to check + */ + public isAreaEmpty(x: number, y: number, width: number, height: number): boolean { + return this.engine.isAreaEmpty(x, y, width, height); + } + + /** + * Locks/unlocks widget. + * @param el element or selector to modify. + * @param val if true widget will be locked. + */ + public locked(els: GridStackElement, val: boolean): GridStack { + $(els).each((index, el) => { + const node = el.gridstackNode; + if (node!) return; + node.locked = (val || false); + if (node.locked) { + el.setAttribute('data-gs-locked', 'yes'); + } else { + el.removeAttribute('data-gs-locked'); + } + }); + return this; + } + + /** + * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets. + * If you want gridstack to add the elements for you, use addWidget instead. + * Makes the given element a widget and returns it. + * @param el widget to convert. + * + * @example + * const grid = GridStack.init(); + * grid.el.appendChild('
    ') + * grid.makeWidget('gsi-1'); + */ + public makeWidget(el: GridStackElement): HTMLElement { + this._prepareElement(el, true); + this._updateContainerHeight(); + this._triggerAddEvent(); + this._triggerChangeEvent(); + return $(el).get(0); + } + + /** + * Set the maxWidth for a widget. + * @param el widget to modify. + * @param val A numeric value of the number of columns + */ + public maxWidth(els: GridStackElement, val: number): GridStack { + if (isNaN(val)) return; + $(els).each((index, el) => { + const node = el.gridstackNode; + if (!node) { return; } + node.maxWidth = (val || undefined); + if (node.maxWidth) { + el.setAttribute('data-gs-max-width', val); + } else { + el.removeAttribute('data-gs-max-width'); + } + }); + return this; + } + + /** + * Set the minWidth for a widget. + * @param el widget to modify. + * @param val A numeric value of the number of columns + */ + public minWidth(els: GridStackElement, val: number): GridStack { + if (isNaN(val)) return; + $(els).each((index, el) => { + const node = el.gridstackNode; + if (!node) { return; } + if (node.minWidth) { + el.setAttribute('data-gs-min-width', val); + } else { + el.removeAttribute('data-gs-min-width'); + } + }); + return this; + } + + /** + * Set the maxHeight for a widget. + * @param el widget to modify. + * @param val A numeric value of the number of rows + */ + public maxHeight(els: GridStackElement, val: number): GridStack { + if (isNaN(val)) return; + $(els).each((index, el) => { + const node = el.gridstackNode; + if (!node) { return; } + if (node.maxHeight) { + el.setAttribute('data-gs-max-height', val); + } else { + el.removeAttribute('data-gs-max-height'); + } + }); + return this; + } + + /** + * Set the minHeight for a widget. + * @param el widget to modify. + * @param val A numeric value of the number of rows + */ + public minHeight(els: GridStackElement, val: number): GridStack { + if (isNaN(val)) return; + $(els).each((index, el) => { + const node = el.gridstackNode; + if (!node) { return; } + if (node.minHeight) { + el.setAttribute('data-gs-min-height', val); + } else { + el.removeAttribute('data-gs-min-height'); + } + }); + return this; + } + + /** + * Enables/Disables moving. + * @param el widget to modify. + * @param val if true widget will be draggable. + */ + public movable(els: GridStackElement, val: boolean): GridStack { + $(els).each((index, el: GridItemHTMLElement) => { + const node = el.gridstackNode; + if (!node) { return; } + node.noMove = !(val || false); + if (node.noMove) { + this.dd.draggable(el, 'disable'); + el.classList.remove('ui-draggable-handle'); + } else { + this.dd.draggable(el, 'enable'); + el.classList.remove('ui-draggable-handle'); + } + }); + return this; + } + + /** + * Changes widget position + * @param el widget to modify + * @param x new position x. If value is null or undefined it will be ignored. + * @param y new position y. If value is null or undefined it will be ignored. + */ + public move(el: GridStackElement, x: number, y: number) { + this._updateElement(el, (el, node) => { + x = (x !== null && x !== undefined) ? x : node.x; + y = (y !== null && y !== undefined) ? y : node.y; + + this.engine.moveNode(node, x, y, node.width, node.height); + }); + } + + /** + * Event handler that extracts our CustomEvent data out automatically for receiving custom + * notifications (see doc for supported events) + * @param name of the event (see possible values) or list of names space separated + * @param callback function called with event and optional second/third param + * (see README documentation for each signature). + * + * @example + * grid.on('added', function(e, items) { log('added ', items)} ); + * or + * grid.on('added removed change', function(e, items) { log(e.type, items)} ); + * + * Note: in some cases it is the same as calling native handler and parsing the event. + * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} ); + */ + public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void) { + if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { + // native CustomEvent handlers - cash the generic handlers so we can remove + const noData = (eventName === 'enable' || eventName === 'disable'); + this._gsEventHandler = this._gsEventHandler || {}; + if (noData) { + this._gsEventHandler[eventName] = (event) => callback(event); + } else { + this._gsEventHandler[eventName] = (event) => callback(event, event.detail); + } + this.el.addEventListener(eventName, this._gsEventHandler[eventName]); + } else { + // still JQuery events + this.$el.on(eventName as any, callback); + } + } + + /** + * unsubscribe from the 'on' event below + * @param eventName of the event (see possible values) + */ + public off(eventName: GridStackEvent) { + if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { + // remove native CustomEvent handlers + if (this._gsEventHandler && this._gsEventHandler[eventName]) { + this.el.removeEventListener(eventName, this._gsEventHandler[eventName]); + delete this._gsEventHandler[eventName]; + } + } else { + // still JQuery events + this.$el.off(eventName); + } + } + + /** + * Removes widget from the grid. + * @param el widget to modify + * @param detachNode if false DOM node won't be removed from the tree (Default? true). + */ + public removeWidget(el: GridStackElement, detachNode?: boolean) { + const elItem = $(el).get(0) as GridItemHTMLElement; + detachNode = (detachNode === undefined ? true : detachNode); + let node = elItem.gridstackNode; + // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 + if (!node) { + node = this.engine.nodes.find(n => el === n.el); + } + if (!node) return; + + delete elItem.gridstackNode; + this.engine.removeNode(node, detachNode); + this._triggerRemoveEvent(); + this._triggerChangeEvent(); + } + + /** + * Removes all widgets from the grid. + * @param detachNode if false DOM nodes won't be removed from the tree (Default? true). + */ + public removeAll(detachNode?: boolean) { + if (detachNode !== false) { + // remove our data structure before list gets emptied and DOM elements stay behind + this.engine.nodes.forEach(n => delete n.el.gridstackNode); + } + this.engine.removeAll(detachNode); + this._triggerRemoveEvent(); + } + + /** + * Changes widget size + * @param el widget to modify + * @param width new dimensions width. If value is null or undefined it will be ignored. + * @param height new dimensions height. If value is null or undefined it will be ignored. + */ + public resize(el: GridStackElement, width: number, height: number) { + this._updateElement(el, (el, node) => { + width = (width !== null && width !== undefined) ? width : node.width; + height = (height !== null && height !== undefined) ? height : node.height; + + this.engine.moveNode(node, node.x, node.y, width, height); + }); + } + + /** + * Enables/Disables resizing. + * @param el widget to modify + * @param val if true widget will be resizable. + */ + public resizable(els: GridStackElement, val: boolean): GridStack { + $(els).each((index, el: GridItemHTMLElement) => { + const node = el.gridstackNode; + if (!node) { return; } + node.noResize = !(val || false); + if (node.noResize) { + this.dd.resizable(el, 'disable'); + } else { + this.dd.resizable(el, 'enable'); + } + }); + return this; + } + + /** + * Toggle the grid animation state. Toggles the `grid-stack-animate` class. + * @param doAnimate if true the grid will animate. + */ + public setAnimation(doAnimate: boolean) { + if (doAnimate) { + this.$el.addClass('grid-stack-animate'); + } else { + this.$el.removeClass('grid-stack-animate'); + } + } + + /** + * Toggle the grid static state. Also toggle the grid-stack-static class. + * @param staticValue if true the grid become static. + */ + public setStatic(staticValue: boolean) { + this.opts.staticGrid = (staticValue === true); + this.enableMove(!staticValue); + this.enableResize(!staticValue); + this._setStaticClass(); + } + + /** + * Updates widget position/size. + * @param el widget to modify + * @param x new position x. If value is null or undefined it will be ignored. + * @param y new position y. If value is null or undefined it will be ignored. + * @param width new dimensions width. If value is null or undefined it will be ignored. + * @param height new dimensions height. If value is null or undefined it will be ignored. + */ + public update(el: GridStackElement, x: number, y: number, width: number, height: number) { + this._updateElement(el, (el, node) => { + x = (x !== null && x !== undefined) ? x : node.x; + y = (y !== null && y !== undefined) ? y : node.y; + width = (width !== null && width !== undefined) ? width : node.width; + height = (height !== null && height !== undefined) ? height : node.height; + + this.engine.moveNode(node, x, y, width, height); + }); + } + + /** + * Updates the vertical margin - see `GridstackOptions.verticalMargin` for format options. + * + * @param value new vertical margin value + * @param noUpdate (optional) if true, styles will not be updated + */ + public verticalMargin(value: numberOrString, noUpdate?: boolean) { + const heightData = Utils.parseHeight(value); + + if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) { + return ; + } + this.opts.verticalMarginUnit = heightData.unit; + this.opts.verticalMargin = heightData.height; + + if (!noUpdate) { + this._updateStyles(); + } + } + + /** + * returns current vertical margin value + */ + public getVerticalMargin(): number { return this.opts.verticalMargin as number; } + + /** + * Returns true if the height of the grid will be less the vertical + * constraint. Always returns true if grid doesn't have height constraint. + * @param x new position x. If value is null or undefined it will be ignored. + * @param y new position y. If value is null or undefined it will be ignored. + * @param width new dimensions width. If value is null or undefined it will be ignored. + * @param height new dimensions height. If value is null or undefined it will be ignored. + * @param autoPosition if true then x, y parameters will be ignored and widget + * will be places on the first available position + * + * @example + * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) { + * grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); + * } else { + * alert('Not enough free space to place the widget'); + * } + */ + public willItFit(x: number, y: number, width: number, height: number, autoPosition: boolean): boolean { + const node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition}; + return this.engine.canBePlacedWithRespectToHeight(node); + } + + private _triggerChangeEvent(skipLayoutChange?: boolean) { + if (this.engine.batchMode) { return; } + const elements = this.engine.getDirtyNodes(true); // verify they really changed + if (elements && elements.length) { + if (!skipLayoutChange) { + this.engine._layoutsNodesChange(elements); + } + this._triggerEvent('change', elements); + } + this.engine._saveInitial(); // we called, now reset initial values & dirty flags + } + + private _triggerAddEvent() { + if (this.engine.batchMode) { return; } + if (this.engine.addedNodes && this.engine.addedNodes.length > 0) { + this.engine._layoutsNodesChange(this.engine.addedNodes); + // prevent added nodes from also triggering 'change' event (which is called next) + this.engine.addedNodes.forEach(n => { delete n._dirty; }); + this._triggerEvent('added', this.engine.addedNodes); + this.engine.addedNodes = []; + } + } + + private _triggerRemoveEvent() { + if (this.engine.batchMode) { return; } + if (this.engine.removedNodes && this.engine.removedNodes.length > 0) { + this._triggerEvent('removed', this.engine.removedNodes); + this.engine.removedNodes = []; + } + } + + private _triggerEvent(name: string, data?: any) { + const event = data ? new CustomEvent(name, {bubbles: false, detail: data}) : new Event(name); + this.el.dispatchEvent(event); + } + + private _initStyles() { + if (this._stylesId) { + Utils.removeStylesheet(this._stylesId); + } + this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed(); + // insert style to parent (instead of 'head') to support WebComponent + const parent = this.el.parentNode as HTMLElement; + this._styles = Utils.createStylesheet(this._stylesId, parent); + if (this._styles !== null) { + this._styles._max = 0; + } + } + + private _updateStyles(maxHeight?: number) { + if (this._styles === null || this._styles === undefined) { + return; + } + + const prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; + let getHeight; + + if (maxHeight === undefined) { + maxHeight = this._styles._max; + } + + this._initStyles(); + this._updateContainerHeight(); + if (!this.opts.cellHeight) { // The rest will be handled by CSS + return ; + } + if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep it increasing + return ; + } + const height = this.opts.cellHeight as number; + const margin = this.opts.verticalMargin as number; + + if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { + getHeight = (nbRows, nbMargins) => { + return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; + } + } else { + getHeight = (nbRows, nbMargins) => { + if (!nbRows || !nbMargins) { + return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; + } + return 'calc(' + ((height * nbRows) + this.opts.cellHeightUnit) + ' + ' + + ((margin * nbMargins) + this.opts.verticalMarginUnit) + ')'; + } + } + + if (this._styles._max === 0) { + Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); + } + + if (maxHeight > this._styles._max) { + for (var i = this._styles._max; i < maxHeight; ++i) { + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-height="' + (i + 1) + '"]', + 'height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-min-height="' + (i + 1) + '"]', + 'min-height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-max-height="' + (i + 1) + '"]', + 'max-height: ' + getHeight(i + 1, i) + ';', + i + ); + Utils.insertCSSRule(this._styles, + prefix + '[data-gs-y="' + i + '"]', + 'top: ' + getHeight(i, i) + ';', + i + ); + } + this._styles._max = maxHeight; + } + } + + private _updateContainerHeight() { + if (this.engine.batchMode) { return; } + let row = this.engine.getRow(); + if (row < this.opts.minRow) { + row = this.opts.minRow; + } + // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below + const cssMinHeight = parseInt(this.$el.css('min-height')); + if (cssMinHeight > 0) { + const verticalMargin = this.opts.verticalMargin as number; + const minRow = Math.round((cssMinHeight + verticalMargin) / (this.getCellHeight() + verticalMargin)); + if (row < minRow) { + row = minRow; + } + } + this.$el.attr('data-gs-current-row', row); + if (!this.opts.cellHeight) { + return ; + } + if (!this.opts.verticalMargin) { + this.$el.css('height', (row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit); + } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { + this.$el.css('height', (row * ((this.opts.cellHeight as number) + (this.opts.verticalMargin as number)) - + (this.opts.verticalMargin as number)) + this.opts.cellHeightUnit); + } else { + this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit) + + ' + ' + ((row * ((this.opts.verticalMargin as number) - 1)) + this.opts.verticalMarginUnit) + ')'); + } + } + + private _setupRemovingTimeout(el) { + const node = $(el).get(0).gridstackNode; + if (node._removeTimeout || !this.opts.removable) { return; } + node._removeTimeout = setTimeout(() => { + el.addClass('grid-stack-item-removing'); + node._isAboutToRemove = true; + }, this.opts.removeTimeout); + } + + private _clearRemovingTimeout(el) { + const node = $(el).get(0).gridstackNode; + + if (!node._removeTimeout) { + return; + } + clearTimeout(node._removeTimeout); + node._removeTimeout = null; + el.removeClass('grid-stack-item-removing'); + node._isAboutToRemove = false; + } + + /** + * prepares the element for drag&drop + **/ + private _prepareElementsByNode(el, node) { + el = $(el) + + // variables used/cashed between the 3 start/move/end methods, in addition to node passed above + let cellWidth; + let cellFullHeight; // internal cellHeight + v-margin + const self = this; + + /** called when item starts moving/resizing */ + const onStartMoving = function(event, ui) { + self.$el.append(self.$placeholder); + self.engine.cleanNodes(); + self.engine.beginUpdate(node); + cellWidth = self.cellWidth(); + const strictCellHeight = self.getCellHeight(); // heigh without v-margin + // compute height with v-margin (Note: we add 1 margin as last row is missing it) + cellFullHeight = (self.$el.height() + self.getVerticalMargin()) / parseInt(self.$el.attr('data-gs-current-row')); + const o = $(this); + self.$placeholder + .attr('data-gs-x', o.attr('data-gs-x')) + .attr('data-gs-y', o.attr('data-gs-y')) + .attr('data-gs-width', o.attr('data-gs-width')) + .attr('data-gs-height', o.attr('data-gs-height')) + .show(); + node.el = self.$placeholder.get(0); + node._beforeDragX = node.x; + node._beforeDragY = node.y; + node._prevYPix = ui.position.top; + const minHeight = (node.minHeight || 1); + const verticalMargin = self.opts.verticalMargin as number; + + // mineHeight - Each row is cellHeight + verticalMargin, until last one which has no margin below + self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); + self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin); + + if (event.type === 'resizestart') { + o.find('.grid-stack-item').trigger('resizestart'); + } + } + + /** called when item is being dragged/resized */ + const dragOrResize = function(event, ui) { + let x = Math.round(ui.position.left / cellWidth); + let y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight); + let width; + let height; + + if (event.type === 'drag') { + const distance = ui.position.top - node._prevYPix; + node._prevYPix = ui.position.top; + Utils.updateScrollPosition(el[0], ui, distance); + if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 || + (!self.engine.float && y > self.engine.getRow())) { + if (!node._temporaryRemoved) { + if (self.opts.removable === true) { + self._setupRemovingTimeout(el); + } + + x = node._beforeDragX; + y = node._beforeDragY; + + self.$placeholder.detach(); + self.$placeholder.hide(); + self.engine.removeNode(node); + self._updateContainerHeight(); + + node._temporaryRemoved = true; + } else { + return; + } + } else { + self._clearRemovingTimeout(el); + + if (node._temporaryRemoved) { + self.engine.addNode(node); + self.$placeholder + .attr('data-gs-x', x) + .attr('data-gs-y', y) + .attr('data-gs-width', width) + .attr('data-gs-height', height) + .show(); + self.$el.append(self.$placeholder); + node.el = self.$placeholder.get(0); + node._temporaryRemoved = false; + } + } + } else if (event.type === 'resize') { + if (x < 0) return; + width = Math.round(ui.size.width / cellWidth); + height = Math.round((ui.size.height + self.getVerticalMargin()) / cellFullHeight); + } + // width and height are undefined if not resizing + const _lastTriedWidth = width !== undefined ? width : node._lastTriedWidth; + const _lastTriedHeight = height !== undefined ? height : node._lastTriedHeight; + if (!self.engine.canMoveNode(node, x, y, width, height) || + (node._lastTriedX === x && node._lastTriedY === y && + node._lastTriedWidth === _lastTriedWidth && node._lastTriedHeight === _lastTriedHeight)) { + return; + } + node._lastTriedX = x; + node._lastTriedY = y; + node._lastTriedWidth = width; + node._lastTriedHeight = height; + self.engine.moveNode(node, x, y, width, height); + self._updateContainerHeight(); + + if (event.type === 'resize') { + $(event.target).trigger('gsresize', node); + } + } + + /** called when the item stops moving/resizing */ + const onEndMoving = function(event, ui) { + const o = $(this); + if (!o.get(0).gridstackNode) { + return; + } + + // const forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? + self.$placeholder.detach(); + node.el = o.get(0); + self.$placeholder.hide(); + + if (node._isAboutToRemove) { + // forceNotify = true; + const gridToNotify = el.get(0).gridstackNode._grid; + gridToNotify._triggerRemoveEvent(); + delete el.get(0).gridstackNode; + el.remove(); + } else { + self._clearRemovingTimeout(el); + if (!node._temporaryRemoved) { + Utils.removePositioningStyles(o); + o + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height); + } else { + Utils.removePositioningStyles(o); + o + .attr('data-gs-x', node._beforeDragX) + .attr('data-gs-y', node._beforeDragY) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height); + node.x = node._beforeDragX; + node.y = node._beforeDragY; + node._temporaryRemoved = false; + self.engine.addNode(node); + } + } + self._updateContainerHeight(); + self._triggerChangeEvent(); + + self.engine.endUpdate(); + + const nestedGrids = o.find('.grid-stack'); + if (nestedGrids.length && event.type === 'resizestop') { + nestedGrids.each((index, el) => { + el.gridstack.onResizeHandler(); + }); + o.find('.grid-stack-item').trigger('resizestop'); + o.find('.grid-stack-item').trigger('gsresizestop'); + } + if (event.type === 'resizestop') { + self.$el.trigger('gsresizestop', o); + } + } + + this.dd + .draggable(el, { + start: onStartMoving, + stop: onEndMoving, + drag: dragOrResize + }) + .resizable(el, { + start: onStartMoving, + stop: onEndMoving, + resize: dragOrResize + }); + + if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) { + this.dd.draggable(el, 'disable'); + } + if (node.noResize || this.opts.disableResize || this.opts.staticGrid) { + this.dd.resizable(el, 'disable'); + } + this._writeAttr(el, node); + } + + private _prepareElement(el, triggerAddEvent?: boolean) { + triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false; + el = $(el); + + el.addClass(this.opts.itemClass); + let node = this._readAttr(el, {el: el.get(0), _grid: this}); + node = this.engine.addNode(node, triggerAddEvent); + el.get(0).gridstackNode = node; + + this._prepareElementsByNode(el, node); + } + + /** call to write any default attributes back to element */ + private _writeAttr(el, node) { + const $el = $(el); + node = node || {} + // Note: passing null removes the attr in jquery + if (node.x !== undefined) { el.attr('data-gs-x', node.x); } + if (node.y !== undefined) { el.attr('data-gs-y', node.y); } + if (node.width !== undefined) { el.attr('data-gs-width', node.width); } + if (node.height !== undefined) { el.attr('data-gs-height', node.height); } + if (node.autoPosition !== undefined) { el.attr('data-gs-auto-position', node.autoPosition ? true : null); } + if (node.minWidth !== undefined) { el.attr('data-gs-min-width', node.minWidth); } + if (node.maxWidth !== undefined) { el.attr('data-gs-max-width', node.maxWidth); } + if (node.minHeight !== undefined) { el.attr('data-gs-min-height', node.minHeight); } + if (node.maxHeight !== undefined) { el.attr('data-gs-max-height', node.maxHeight); } + if (node.noResize !== undefined) { el.attr('data-gs-no-resize', node.noResize ? true : null); } + if (node.noMove !== undefined) { el.attr('data-gs-no-move', node.noMove ? true : null); } + if (node.locked !== undefined) { el.attr('data-gs-locked', node.locked ? true : null); } + if (node.resizeHandles !== undefined) { el.attr('data-gs-resize-handles', node.resizeHandles); } + if (node.id !== undefined) { el.attr('data-gs-id', node.id); } + } + + /** call to write any default attributes back to element */ + private _readAttr(el, node) { + const $el = $(el); + node = node || {}; + node.x = el.attr('data-gs-x'); + node.y = el.attr('data-gs-y'); + node.width = el.attr('data-gs-width'); + node.height = el.attr('data-gs-height'); + node.autoPosition = Utils.toBool(el.attr('data-gs-auto-position')); + node.maxWidth = el.attr('data-gs-max-width'); + node.minWidth = el.attr('data-gs-min-width'); + node.maxHeight = el.attr('data-gs-max-height'); + node.minHeight = el.attr('data-gs-min-height'); + node.noResize = Utils.toBool(el.attr('data-gs-no-resize')); + node.noMove = Utils.toBool(el.attr('data-gs-no-move')); + node.locked = Utils.toBool(el.attr('data-gs-locked')); + node.resizeHandles = el.attr('data-gs-resize-handles'); + node.id = el.attr('data-gs-id'); + return node; + } + + private _updateElement(el, callback) { + el = $(el).first(); + const node = el.gridstackNode; + if (!node) { return; } + + this.engine.cleanNodes(); + this.engine.beginUpdate(node); + + callback.call(this, el, node); + + this._updateContainerHeight(); + this._triggerChangeEvent(); + + this.engine.endUpdate(); + } + + private _setStaticClass() { + const staticClassName = 'grid-stack-static'; + + if (this.opts.staticGrid === true) { + this.$el.addClass(staticClassName); + } else { + this.$el.removeClass(staticClassName); + } + } + + /** + * called when we are being resized - check if the one Column Mode needs to be turned on/off + * and remember the prev columns we used. + */ + private onResizeHandler() { + if (this.isAutoCellHeight) { + Utils.throttle(() => { this.cellHeight(this.cellWidth(), false)}, 100); + } + + if (this.opts.staticGrid) { return; } + + if (!this.opts.disableOneColumnMode && + (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= this.opts.minWidth) { + if (this.oneColumnMode) { return; } + this.oneColumnMode = true; + this.column(1); + } else { + if (!this.oneColumnMode) { return; } + this.oneColumnMode = false; + this.column(this._prevColumn); + } + } + + /** called to add drag over support to support widgets*/ + private setupAcceptWidget() { + if (this.opts.staticGrid || !this.opts.acceptWidgets) return; + + // vars used by the function callback + let draggingElement = null; + const self = this; + + const onDrag = function(event, ui) { + const el = draggingElement; + const node = el.get(0).gridstackNode; + const pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); + const x = Math.max(0, pos.x); + const y = Math.max(0, pos.y); + if (!node._added) { + node._added = true; + + node.el = el.get(0); + node.autoPosition = true; + node.x = x; + node.y = y; + this.engine.cleanNodes(); + this.engine.beginUpdate(node); + this.engine.addNode(node); + + this.$el.append(self.$placeholder); + self.$placeholder + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height) + .show(); + node.el = self.$placeholder.get(0); + node._beforeDragX = node.x; + node._beforeDragY = node.y; + + self._updateContainerHeight(); + } + if (!self.engine.canMoveNode(node, x, y)) { + return; + } + self.engine.moveNode(node, x, y); + self._updateContainerHeight(); + }; + + this.dd + .droppable(this.el, { + accept: el => { + el = $(el); + const node = el.get(0).gridstackNode; + if (node && node._grid === this) { + return false; + } + return el.is(this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets); + } + }) + .on(this.el, 'dropover', (event, ui) => { + const el = $(ui.draggable); + let width, height; + + // see if we already have a node with widget/height and check for attributes + let origNode = el.get(0).gridstackNode; + if (!origNode || !origNode.width || !origNode.height) { + const w = parseInt(el.attr('data-gs-width')); + if (w > 0) { origNode = origNode || {}; origNode.width = w; } + const h = parseInt(el.attr('data-gs-height')); + if (h > 0) { origNode = origNode || {}; origNode.height = h; } + } + + // if not calculate the grid size based on element outer size + // height: Each row is cellHeight + verticalMargin, until last one which has no margin below + const cellWidth = this.cellWidth(); + const cellHeight = this.getCellHeight(); + const verticalMargin = this.opts.verticalMargin as number; + width = origNode && origNode.width ? origNode.width : Math.ceil(el.outerWidth() / cellWidth); + height = origNode && origNode.height ? origNode.height : Math.round((el.outerHeight() + verticalMargin) / (cellHeight + verticalMargin)); + + draggingElement = el; + + const node = this.engine._prepareNode({width: width, height: height, _added: false, _temporary: true}); + node._isOutOfGrid = true; + el.get(0).gridstackNode = node; + el.get(0)._gridstackNodeOrig = origNode; + + el.on('drag', onDrag); + return false; // prevent parent from receiving msg (which may be grid as well) + }) + .on(this.el, 'dropout', (event, ui) => { + // jquery-ui bug. Must verify widget is being dropped out + // check node variable that gets set when widget is out of grid + const el = $(ui.draggable); + const node = el.get(0).gridstackNode; + if (!node || !node._isOutOfGrid) { + return; + } + el.unbind('drag', onDrag); + node.el = null; + this.engine.removeNode(node); + this.$placeholder.detach(); + this._updateContainerHeight(); + el.get(0).gridstackNode = el.get(0)._gridstackNodeOrig; + return false; // prevent parent from receiving msg (which may be grid as well) + }) + .on(this.el, 'drop', (event, ui) => { + this.$placeholder.detach(); + + const node = $(ui.draggable).get(0).gridstackNode; + delete node._isOutOfGrid; + node._grid = this; + const el = $(ui.draggable).clone(false); + el.get(0).gridstackNode = node; + const originalNode = $(ui.draggable).get(0)._gridstackNodeOrig; + if (originalNode !== undefined && originalNode._grid !== undefined) { + originalNode._grid._triggerRemoveEvent(); + } + $(ui.helper).remove(); + node.el = el.get(0); + this.$placeholder.hide(); + Utils.removePositioningStyles(el); + el.find('div.ui-resizable-handle').remove(); + + el + .attr('data-gs-x', node.x) + .attr('data-gs-y', node.y) + .attr('data-gs-width', node.width) + .attr('data-gs-height', node.height) + .addClass(this.opts.itemClass) + .enableSelection() + .removeData('draggable') + .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') + .unbind('drag', onDrag); + this.$el.append(el); + this._prepareElementsByNode(el, node); + this._updateContainerHeight(); + this.engine.addedNodes.push(node); + this._triggerAddEvent(); + this._triggerChangeEvent(); + + this.engine.endUpdate(); + $(ui.draggable).unbind('drag', onDrag); + delete $(ui.draggable).get(0).gridstackNode; + delete $(ui.draggable).get(0)._gridstackNodeOrig; + this.$el.trigger('dropped', [originalNode, node]); + return false; // prevent parent from receiving msg (which may be grid as well) + }); + } + + // legacy method renames + private setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); + private setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 000000000..e1bcaae19 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,13 @@ +// index.ts 2.0.0-rc @preserve + +/** + * The package's root file. Exports all exported classes. + */ +import './gridstack-poly.js'; + +export * from './types'; +export * from './utils'; +export * from './gridstack-engine'; +export * from './gridstack-dragdrop-plugin'; +export * from './gridstack'; +export * from './jqueryui-gridstack-dragdrop-plugin'; diff --git a/src/jquery-ui.js b/src/jquery-ui.js index 68b416b22..4030bdfb9 100644 --- a/src/jquery-ui.js +++ b/src/jquery-ui.js @@ -1,7 +1,8 @@ /*! jQuery UI - v1.12.1 - 2019-11-20 * http://jqueryui.com * Includes: widget.js, data.js, disable-selection.js, scroll-parent.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/mouse.js -* Copyright jQuery Foundation and other contributors; Licensed MIT @preserve*/ +* Copyright jQuery Foundation and other contributors; Licensed MIT +*/ (function( factory ) { /* [alain] we compile this in so no need to load with AMD @@ -21,7 +22,7 @@ $.ui = $.ui || {}; var version = $.ui.version = "1.12.1"; -/*! +/* * jQuery UI Widget 1.12.1 * http://jqueryui.com * @@ -744,7 +745,7 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { var widget = $.widget; -/*! +/* * jQuery UI :data 1.12.1 * http://jqueryui.com * @@ -773,7 +774,7 @@ var data = $.extend( $.expr[ ":" ], { } } ); -/*! +/* * jQuery UI Disable Selection 1.12.1 * http://jqueryui.com * @@ -809,7 +810,7 @@ var disableSelection = $.fn.extend( { } ); -/*! +/* * jQuery UI Scroll Parent 1.12.1 * http://jqueryui.com * @@ -849,7 +850,7 @@ var scrollParent = $.fn.scrollParent = function( includeHidden ) { // This file is deprecated var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); -/*! +/* * jQuery UI Mouse 1.12.1 * http://jqueryui.com * @@ -1135,7 +1136,7 @@ var safeBlur = $.ui.safeBlur = function( element ) { }; -/*! +/* * jQuery UI Draggable 1.12.1 * http://jqueryui.com * @@ -2365,7 +2366,7 @@ $.ui.plugin.add( "draggable", "zIndex", { var widgetsDraggable = $.ui.draggable; -/*! +/* * jQuery UI Droppable 1.12.1 * http://jqueryui.com * @@ -2846,7 +2847,7 @@ if ( $.uiBackCompat !== false ) { var widgetsDroppable = $.ui.droppable; -/*! +/* * jQuery UI Resizable 1.12.1 * http://jqueryui.com * diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts new file mode 100644 index 000000000..58eeb236c --- /dev/null +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -0,0 +1,91 @@ +// jqueryui-gridstack-dragdrop-plugin.ts 2.0.0-rc @preserve + +/** JQuery UI Drag&Drop plugin + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +import { GridStack } from './gridstack'; +import { GridStackDragDropPlugin, DDOpts, DDKey } from './gridstack-dragdrop-plugin'; +import { GridStackElement } from './types'; + +// TODO: TEMPORARY until can remove jquery-ui drag&drop and this class! +// see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs +import * as $ from './jquery.js'; +import './jquery-ui.js'; + +/** + * Jquery-ui based drag'n'drop plugin. + */ +export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { + public constructor(grid: GridStack) { + super(grid); + } + + public resizable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + const $el = $(el); + if (opts === 'disable' || opts === 'enable') { + $el.resizable(opts); + } else if (opts === 'option') { + $el.resizable(opts, key, value); + } else { + const handles = $el.data('gs-resize-handles') ? $el.data('gs-resize-handles') : this.grid.opts.resizable.handles; + $el.resizable({...this.grid.opts.resizable, ...{handles: handles}, ...{ // was using $.extend() + start: opts.start || function() {}, + stop: opts.stop || function() {}, + resize: opts.resize || function() {} + }}); + } + return this; + }; + + public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + const $el = $(el); + if (opts === 'disable' || opts === 'enable') { + $el.draggable(opts); + } else { + $el.draggable({...this.grid.opts.draggable, ...{ // was using $.extend() + containment: (this.grid.opts._isNested && !this.grid.opts.dragOut) ? + $(this.grid.el).parent() : (this.grid.opts.draggable.containment || null), + start: opts.start || function() {}, + stop: opts.stop || function() {}, + drag: opts.drag || function() {} + }}); + } + return this; + }; + + public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + const $el = $(el); + $el.droppable(opts); + return this; + }; + + public isDroppable(el: GridStackElement): boolean { + const $el = $(el); + return Boolean($el.data('droppable')); + }; + + public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin { + $(el).on(eventName, callback); + return this; + }; +} + +// finally register ourself +GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); + +/* OLD code for reference +function JQueryUIGridStackDragDropPlugin(grid) { + GridStack.DragDropPlugin.call(this, grid); +} + +GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); + +JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype); +JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; +.... +scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; +return JQueryUIGridStackDragDropPlugin; +*/ \ No newline at end of file diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 000000000..cb5081db8 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,212 @@ +// types.ts 2.0.0-rc @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +export type numberOrString = number | string; +export type GridStackElement = string | HTMLElement | GridItemHTMLElement; +export interface GridItemHTMLElement extends HTMLElement { + gridstackNode?: GridStackNode; // grid items point back to node + /** @internal */ + _gridstackNodeOrig?: GridStackNode; +} + +/** + * Defines the options for a Grid + */ +export interface GridstackOptions { + /** + * accept widgets dragged from other grids or from outside (default: `false`). Can be: + * `true` (uses `'.grid-stack-item'` class filter) or `false`, + * string for explicit class name, + * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html) + */ + acceptWidgets?: boolean | string | ((i: number, element: Element) => boolean); + + /** if true the resizing handles are shown even if the user is not hovering over the widget (default?: false) */ + alwaysShowResizeHandle?: boolean; + + /** turns animation on (default?: true) */ + animate?: boolean; + + /** if false gridstack will not initialize existing items (default?: true) */ + auto?: boolean; + + /** + * one cell height (default?: 60). Can be: + * an integer (px) + * a string (ex: '100px', '10em', '10rem', '10%') + * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files. + * 'auto' - height will be calculated to match cell width (initial square grid). + */ + cellHeight?: numberOrString; + + /** (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') */ + cellHeightUnit?: string; + + /** number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns */ + column?: number; + + /** class that implement drag'n'drop functionality for gridstack. If false grid will be static. + * (default?: null - first available plugin will be used) + */ + ddPlugin?: false | null | any; + + /** disallows dragging of widgets (default?: false) */ + disableDrag?: boolean; + + /** disables the onColumnMode when the window width is less than minWidth (default?: false) */ + disableOneColumnMode?: boolean; + + /** disallows resizing of widgets (default?: false). */ + disableResize?: boolean; + + /** allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) */ + draggable?: {} | any; + + /** let user drag nested grid items out of a parent or not (default false) */ + dragOut?: boolean; + + /** enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) */ + float?: boolean; + + /** draggable handle selector (default?: '.grid-stack-item-content') */ + handle?: string; + + /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */ + handleClass?: string; + + /** widget class (default?: 'grid-stack-item') */ + itemClass?: string; + + /** maximum rows amount. Default? is 0 which means no maximum rows */ + maxRow?: number; + + /** minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute + * on the grid div in pixels, which will round to the closest row. + */ + minRow?: number; + + /** minimal width. If window width is less, grid will be shown in one column mode (default?: 768) */ + minWidth?: number; + + /** + * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column + * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false) + */ + oneColumnModeDomSort?: boolean; + + /** class for placeholder (default?: 'grid-stack-placeholder') */ + placeholderClass?: string; + + /** placeholder default content (default?: '') */ + placeholderText?: string; + + /** allows to override UI resizable options. (default?: { autoHide?: true, handles?: 'se' }) */ + resizable?: {} | any; + + /** + * if true widgets could be removed by dragging outside of the grid. It could also be a selector string, + * in this case widgets will be removed by dropping them there (default?: false) + * See example (http://gridstack.github.io/gridstack.js/demo/two.html) + */ + removable?: boolean | string; + + /** allows to override UI removable options. (default?: { accept: '.' + opts.itemClass }) */ + removableOptions?: {}; + + /** time in milliseconds before widget is being removed while dragging outside of the grid. (default?: 2000) */ + removeTimeout?: number; + + /** fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. (default `0` no constrain) */ + row?: number; + + /** + * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto') + * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html) + */ + rtl?: boolean | 'auto'; + + /** + * makes grid static (default?: false). If `true` widgets are not movable/resizable. + * You don't even need draggable/resizable. A CSS class + * 'grid-stack-static' is also added to the element. + */ + staticGrid?: boolean; + + /** + * vertical gap size (default?: 20). Can be: + * an integer (px) + * a string (ex: '2em', '20px', '2rem') + */ + verticalMargin?: numberOrString; + + /** (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem') */ + verticalMarginUnit?: string; + + /** @internal */ + _isNested?: boolean; + /** @internal */ + _class?: string; +} + + +/** + * Gridstack Widget creation options + */ +export interface GridstackWidget { + /** widget position x (default?: 0) */ + x?: number; + /** widget position y (default?: 0) */ + y?: number; + /** widget dimension width (default?: 1) */ + width?: number; + /** widget dimension height (default?: 1) */ + height?: number; + /** if true then x, y parameters will be ignored and widget will be places on the first available position (default?: false) */ + autoPosition?: boolean; + /** minimum width allowed during resize/creation (default?: undefined = un-constrained) */ + minWidth?: number; + /** maximum width allowed during resize/creation (default?: undefined = un-constrained) */ + maxWidth?: number; + /** minimum height allowed during resize/creation (default?: undefined = un-constrained) */ + minHeight?: number; + /** maximum height allowed during resize/creation (default?: undefined = un-constrained) */ + maxHeight?: number; + /** prevent resizing (default?: undefined = un-constrained) */ + noResize?: boolean; + /** prevents moving (default?: undefined = un-constrained) */ + noMove?: boolean; + /** prevents moving and resizing (default?: undefined = un-constrained) */ + locked?: boolean; + /** widgets can have their own resize handles. For example 'e,w' will make the particular widget only resize east and west. */ + resizeHandles?: string; + /** value for `data-gs-id` stored on the widget (default?: undefined) */ + id?: numberOrString; +} + +/** + * internal descriptions describing the items in the grid + */ +export interface GridStackNode extends GridstackWidget { + el?: GridItemHTMLElement; + /** @internal need to do that for each and use --stripInternal */ + _id?: number; + _dirty?: boolean; + _updating?: boolean; + _added?: boolean; + _temporary?: boolean; + _isOutOfGrid?: boolean; + _origX?: number; + _origY?: number; + _packY?: number; + _origW?: number; + _origH?: number; + _lastTriedX?: number; + _lastTriedY?: number; + _lastTriedWidth?: number; + _lastTriedHeight?: number; +} diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 000000000..22aba9baf --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,252 @@ +// utils.ts 2.0.0-rc @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ + +import { GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; + +/** checks for obsolete method names */ +export function obsolete(f, oldName: string, newName: string, rev: string) { + const wrapper = function() { + console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' + + 'with `' + newName + '`. It will be **completely** removed in v1.0'); + return f.apply(this, arguments); + } + wrapper.prototype = f.prototype; + return wrapper; +} + +/** checks for obsolete grid options (can be used for any fields, but msg is about options) */ +export function obsoleteOpts(opts: GridstackOptions, oldName: string, newName: string, rev: string) { + if (opts[oldName] !== undefined) { + opts[newName] = opts[oldName]; + console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' + + newName + '`. It will be **completely** removed in v1.0'); + } +} + +/** checks for obsolete grid options which are gone */ +export function obsoleteOptsDel(opts: GridstackOptions, oldName: string, rev: string, info: string) { + if (opts[oldName] !== undefined) { + console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info); + } +} + +/** checks for obsolete Jquery element attributes */ +export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string) { + const oldAttr = el.getAttribute(oldName); + if (oldAttr !== undefined) { + el.setAttribute(newName, oldAttr); + console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' + + newName + '`. It will be **completely** removed in v1.0'); + } +} + + +/** + * Utility methods + */ +export namespace Utils { + + /** returns true if a and b overlap */ + export function isIntercepted(a: GridstackWidget, b: GridstackWidget): boolean { + return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); + } + + /** + * Sorts array of nodes + * @param nodes array to sort + * @param dir 1 for asc, -1 for desc (optional) + * @param width width of the grid. If undefined the width will be calculated automatically (optional). + **/ + export function sort(nodes: GridStackNode[], dir?: number, column?: number): GridStackNode[] { + if (!column) { + const widths = nodes.map(function (node) { return node.x + node.width; }); + column = Math.max.apply(Math, widths); + } + + if (dir === -1) + return sortBy(nodes, (n) => -(n.x + n.y * column)); + else + return sortBy(nodes, (n) => (n.x + n.y * column)); + } + + export function createStylesheet(id: string, parent?: HTMLElement): CSSStyleSheet { + const style: HTMLStyleElement = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.setAttribute('data-gs-style-id', id); + if ((style as any).styleSheet) { // ??? only CSSImportRule have that and different beast... + (style as any).styleSheet.cssText = ''; + } else { + style.appendChild(document.createTextNode('')); // WebKit hack + } + if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head + parent.insertBefore(style, parent.firstChild); + return style.sheet as CSSStyleSheet; + } + + export function removeStylesheet(id: string) { + const el = document.querySelector('STYLE[data-gs-style-id=' + id + ']'); + if (!el) return; + el.parentNode.removeChild(el); + } + + export function insertCSSRule(sheet: CSSStyleSheet, selector: string, rules: string, index: number) { + if (typeof sheet.insertRule === 'function') { + sheet.insertRule(selector + '{' + rules + '}', index); + } else if (typeof sheet.addRule === 'function') { + sheet.addRule(selector, rules, index); + } + } + + export function toBool(v: any): boolean { + if (typeof v === 'boolean') { + return v; + } + if (typeof v === 'string') { + v = v.toLowerCase(); + return !(v === '' || v === 'no' || v === 'false' || v === '0'); + } + return Boolean(v); + } + + export function parseHeight(val: numberOrString) { + let height: number; + let heightUnit = 'px'; + if (typeof val === 'string') { + const match = val.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/); + if (!match) { + throw new Error('Invalid height'); + } + heightUnit = match[2] || 'px'; + height = parseFloat(match[1]); + } else { + height = val; + } + return { height: height, unit: heightUnit } + } + + export function without(array, item) { + const index = array.indexOf(item); + + if (index !== -1) { + array = array.slice(0); + array.splice(index, 1); + } + + return array; + } + + export function sortBy(array, getter) { + return array.slice(0).sort(function (left, right) { + const valueLeft = getter(left); + const valueRight = getter(right); + + if (valueRight === valueLeft) { + return 0; + } + + return valueLeft > valueRight ? 1 : -1; + }); + } + + export function defaults(target, arg1) { + const sources = Array.prototype.slice.call(arguments, 1); + + sources.forEach(function (source) { + for (var prop in source) { + if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { + target[prop] = source[prop]; + } + } + }); + + return target; + } + + export function clone(target) { + return {...target}; // was $.extend({}, target) + } + + export function throttle(callback, delay) { + let isWaiting = false; + + return function () { + if (!isWaiting) { + callback.apply(this, arguments); + isWaiting = true; + setTimeout(function () { isWaiting = false; }, delay); + } + } + } + + export function removePositioningStyles(el) { + const style = el[0].style; + if (style.position) { + style.removeProperty('position'); + } + if (style.left) { + style.removeProperty('left'); + } + if (style.top) { + style.removeProperty('top'); + } + if (style.width) { + style.removeProperty('width'); + } + if (style.height) { + style.removeProperty('height'); + } + } + + export function getScrollParent(el) { + let returnEl; + if (el === null) { + returnEl = null; + } else if (el.scrollHeight > el.clientHeight) { + returnEl = el; + } else { + returnEl = getScrollParent(el.parentNode); + } + return returnEl; + } + + export function updateScrollPosition(el, ui, distance) { + // is widget in view? + const rect = el.getBoundingClientRect(); + const innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); + if (rect.top < 0 || + rect.bottom > innerHeightOrClientHeight + ) { + // set scrollTop of first parent that scrolls + // if parent is larger than el, set as low as possible + // to get entire widget on screen + const offsetDiffDown = rect.bottom - innerHeightOrClientHeight; + const offsetDiffUp = rect.top; + const scrollEl = getScrollParent(el); + if (scrollEl !== null) { + const prevScroll = scrollEl.scrollTop; + if (rect.top < 0 && distance < 0) { + // moving up + if (el.offsetHeight > innerHeightOrClientHeight) { + scrollEl.scrollTop += distance; + } else { + scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp; + } + } else if (distance > 0) { + // moving down + if (el.offsetHeight > innerHeightOrClientHeight) { + scrollEl.scrollTop += distance; + } else { + scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown; + } + } + // move widget y by amount scrolled + ui.position.top += scrollEl.scrollTop - prevScroll; + } + } + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..948886cf1 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,47 @@ +{ + "compilerOptions": { + /* + "allowJs": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "inlineSources": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true + "declaration": true, + "lib": [ "es6", "es2015", "dom" ], + "module": "es6", + "noImplicitAny": false, + "outDir": "./dist", + "sourceMap": true, + "strict": false, + "target": "es5", + */ + /* + "outDir": "./dist/", + "noImplicitAny": false, + "module": "commonjs", + "target": "es5", + "allowJs": true + */ + "declaration": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "inlineSources": true, + "lib": [ "es6", "es2015", "dom" ], + "module": "commonjs", + "noImplicitAny": false, + "outDir": "./dist", + "sourceMap": true, + "strict": false, + "target": "es5" + }, + "exclude": [ + "./src/**/*.spec.ts" + ], + "include": [ + "./src/**/*.ts" + ], + "typeroots": [ + "./node_modules/@types" + ] +} diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..0d3c46ae2 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,23 @@ +const path = require('path'); + +module.exports = { + entry: './src/index.ts', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + ], + }, + resolve: { + extensions: [ '.ts', '.js' ], + }, + output: { + filename: 'gridstack.all.js', + path: path.resolve(__dirname, 'dist'), + libraryTarget: 'umd', + library: 'gridstack', + }, +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0d212947c..33cb2254d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,6 +107,20 @@ traverse "^0.6.6" unified "^6.1.6" +"@types/jquery@*", "@types/jquery@^3.3.32": + version "3.3.33" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9" + integrity sha512-U6IdXYGkfUI42SR79vB2Spj+h1Ly3J3UZjpd8mi943lh126TK7CB+HZOxGh2nM3IySor7wqVQdemD/xtydsBKA== + dependencies: + "@types/sizzle" "*" + +"@types/jqueryui@^1.12.10": + version "1.12.10" + resolved "https://registry.yarnpkg.com/@types/jqueryui/-/jqueryui-1.12.10.tgz#39ebe4c391fb3b9f623521b4d803d9d4804883fa" + integrity sha512-T8sctslWIiLl/2EHEQQfKCB92S9bMKBaeE3+iBRbSERMK/1gzyfqjaIEksduB4eUEsKq+Ji0Y+qVbiXQwI2Mwg== + dependencies: + "@types/jquery" "*" + "@types/mime-types@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" @@ -122,6 +136,167 @@ resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== +"@types/sizzle@*": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" + integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -145,6 +320,11 @@ acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn@^6.2.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784" + integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw== + acorn@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" @@ -172,7 +352,17 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== @@ -233,6 +423,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -248,7 +446,7 @@ append-buffer@^1.0.2: dependencies: buffer-equal "^1.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -325,6 +523,15 @@ arrify@^1.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -344,6 +551,14 @@ assert@1.4.1: dependencies: util "0.10.3" +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -354,6 +569,11 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" @@ -416,6 +636,11 @@ base64-arraybuffer@0.1.5: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + base64id@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" @@ -460,11 +685,28 @@ better-assert@~1.0.0: dependencies: callsite "1.0.0" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -484,11 +726,16 @@ blocking-proxy@^1.0.0: dependencies: minimist "^1.2.0" -bluebird@^3.3.0: +bluebird@^3.3.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + body-parser@^1.16.1: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -528,7 +775,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -544,13 +791,77 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserstack@^1.5.1: version "1.5.3" resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" @@ -586,6 +897,25 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" @@ -596,6 +926,27 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -639,11 +990,25 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -655,15 +1020,6 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" @@ -684,6 +1040,25 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chokidar@^2.0.2: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + chokidar@^3.0.0: version "3.3.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" @@ -699,6 +1074,26 @@ chokidar@^3.0.0: optionalDependencies: fsevents "~2.1.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -737,6 +1132,15 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -813,11 +1217,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@~2.20.3: +commander@^2.20.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -843,7 +1252,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2: +concat-stream@1.6.2, concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -868,11 +1277,21 @@ connect@^3.6.0, connect@^3.6.6, connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -895,6 +1314,18 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -921,15 +1352,38 @@ coveralls@^3.0.9, coveralls@~3.0.0: minimist "^1.2.0" request "^2.88.0" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== dependencies: - lru-cache "^4.0.1" - which "^1.2.9" + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" -cross-spawn@^6.0.5: +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -940,6 +1394,31 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -952,6 +1431,11 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1000,7 +1484,7 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1072,6 +1556,14 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -1087,6 +1579,15 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + doctoc@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" @@ -1124,6 +1625,11 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -1154,7 +1660,7 @@ duplexer@^0.1.1: resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= -duplexify@^3.5.1, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.5.1, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -1177,6 +1683,19 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +elliptic@^6.0.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" + integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -1192,6 +1711,16 @@ emoji-regex@~6.1.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932" integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI= +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -1244,6 +1773,24 @@ engine.io@~3.2.0: engine.io-parser "~2.1.0" ws "~3.3.1" +enhanced-resolve@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -1259,6 +1806,13 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + error-ex@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1307,6 +1861,14 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" @@ -1438,6 +2000,32 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +events@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" + integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit@^0.1.2, exit@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -1562,6 +2150,11 @@ fd-slicer@~1.0.1: dependencies: pend "~1.2.0" +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + figures@^1.0.1: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -1589,6 +2182,11 @@ file-sync-cmp@^0.1.0: resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs= +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -1619,6 +2217,15 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1627,6 +2234,23 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" + integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== + dependencies: + detect-file "^1.0.0" + is-glob "^4.0.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -1674,7 +2298,7 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== -flush-write-stream@^1.0.2: +flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== @@ -1732,6 +2356,14 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -1749,11 +2381,29 @@ fs-mkdirp-stream@^1.0.0: graceful-fs "^4.1.11" through2 "^2.0.3" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^1.2.7: + version "1.2.11" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" + integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@~2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" @@ -1805,11 +2455,23 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -1869,7 +2531,7 @@ glob@^5.0.15, glob@~5.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1893,6 +2555,13 @@ glob@~7.0.0: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -1913,6 +2582,15 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -1946,7 +2624,7 @@ globule@^1.0.0: lodash "~4.17.12" minimatch "~3.0.2" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -2213,6 +2891,31 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -2307,6 +3010,11 @@ https-browserify@0.0.1: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI= +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" @@ -2330,6 +3038,16 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -2348,6 +3066,14 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-local@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2370,6 +3096,11 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2393,7 +3124,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4: +ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -2417,6 +3148,11 @@ inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" +interpret@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + interpret@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" @@ -2427,6 +3163,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" @@ -2467,6 +3208,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2641,6 +3389,11 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -2683,7 +3436,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -2839,6 +3592,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2859,8 +3617,15 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -jsonfile@^4.0.0: - version "4.0.0" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: @@ -2996,6 +3761,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + lcov-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" @@ -3062,6 +3834,37 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.0.2, loader-utils@^1.2.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" @@ -3104,7 +3907,14 @@ lru-cache@4.1.x, lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -make-dir@^2.1.0: +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -3119,6 +3929,18 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3151,11 +3973,45 @@ maxmin@^2.1.0: gzip-size "^3.0.0" pretty-bytes "^3.0.0" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + meow@^3.3.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -3172,7 +4028,7 @@ meow@^3.3.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" -micromatch@^3.0.4: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -3191,6 +4047,22 @@ micromatch@^3.0.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" @@ -3213,11 +4085,21 @@ mime@^2.0.3, mime@^2.3.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3240,6 +4122,22 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -3266,6 +4164,18 @@ morgan@^1.9.1: on-finished "~2.3.0" on-headers "~1.0.1" +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3286,7 +4196,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.13.2: +nan@^2.12.1, nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -3318,7 +4228,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -3360,6 +4270,35 @@ node-http2@^4.0.1: url "^0.11.0" websocket-stream "^5.0.1" +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + node-sass@^4.13.1: version "4.13.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" @@ -3427,6 +4366,13 @@ now-and-later@^2.0.0: dependencies: once "^1.3.2" +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3447,7 +4393,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -3573,6 +4519,11 @@ ordered-read-streams@^1.0.0: dependencies: readable-stream "^2.0.1" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -3585,6 +4536,15 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3598,11 +4558,54 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -pako@~1.0.2: +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.2, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3610,6 +4613,18 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" @@ -3667,6 +4682,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -3679,6 +4699,11 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -3689,7 +4714,7 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.1: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= @@ -3720,6 +4745,17 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -3730,7 +4766,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.7: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: version "2.2.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== @@ -3757,6 +4793,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + portscanner@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" @@ -3787,11 +4830,21 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + progress@^2.0.0, progress@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + protractor@^5.0.0: version "5.4.3" resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" @@ -3818,6 +4871,11 @@ proxy-from-env@^1.0.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3828,6 +4886,18 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -3836,7 +4906,15 @@ pump@^2.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.5: +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3, pumpify@^1.3.5: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== @@ -3850,6 +4928,11 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -3901,11 +4984,31 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + range-parser@^1.2.0, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -3946,7 +5049,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -3959,6 +5062,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" @@ -4103,11 +5215,23 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" @@ -4116,6 +5240,11 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -4177,6 +5306,14 @@ rimraf@2.6.3, rimraf@~2.6.2: dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -4184,6 +5321,13 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + rxjs@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" @@ -4196,7 +5340,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -4240,6 +5384,15 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -4292,6 +5445,11 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -4350,6 +5508,14 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -4452,6 +5618,11 @@ socket.io@2.1.1: socket.io-client "2.1.1" socket.io-parser "~3.2.0" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -4470,6 +5641,14 @@ source-map-support@~0.4.0: dependencies: source-map "^0.5.6" +source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -4487,7 +5666,7 @@ source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -4564,6 +5743,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -4597,6 +5783,33 @@ stream-browserify@2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -4635,7 +5848,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -4658,6 +5871,13 @@ string_decoder@0.10: resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= +string_decoder@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4679,7 +5899,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -4700,6 +5920,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -4719,6 +5944,13 @@ structured-source@^3.0.2: dependencies: boundary "^1.0.1" +supports-color@6.1.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -4738,13 +5970,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -4755,6 +5980,11 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tar@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" @@ -4764,6 +5994,30 @@ tar@^2.0.0: fstream "^1.0.12" inherits "2" +terser-webpack-plugin@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" + integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.6.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.4.tgz#40a0b37afbe5b57e494536815efa68326840fc00" + integrity sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -4797,6 +6051,13 @@ timers-browserify@2.0.2: dependencies: setimmediate "^1.0.4" +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + tiny-lr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" @@ -4836,6 +6097,11 @@ to-array@0.1.4: resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -4925,11 +6191,27 @@ trough@^1.0.0: dependencies: glob "^7.1.2" +ts-loader@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" + integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^4.0.0" + semver "^6.0.0" + tslib@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4967,6 +6249,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@3.4.5: + version "3.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" + integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== + uglify-js@^3.1.4, uglify-js@^3.5.0: version "3.8.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" @@ -5028,6 +6315,20 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + unique-stream@^2.0.2: version "2.3.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" @@ -5085,6 +6386,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + update-section@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" @@ -5140,6 +6446,13 @@ util@0.10.3: dependencies: inherits "2.0.1" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -5150,6 +6463,11 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-compile-cache@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== + v8-compile-cache@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" @@ -5254,11 +6572,25 @@ vinyl@^2.0.0, vinyl@^2.1.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + webdriver-js-extender@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" @@ -5284,6 +6616,60 @@ webdriver-manager@^12.0.6: semver "^5.3.0" xml2js "^0.4.17" +webpack-cli@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" + integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== + dependencies: + chalk "2.4.2" + cross-spawn "6.0.5" + enhanced-resolve "4.1.0" + findup-sync "3.0.0" + global-modules "2.0.0" + import-local "2.0.0" + interpret "1.2.0" + loader-utils "1.2.3" + supports-color "6.1.0" + v8-compile-cache "2.0.3" + yargs "13.2.4" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.42.0: + version "4.42.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + websocket-driver@>=0.5.1: version "0.7.3" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" @@ -5315,7 +6701,12 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0: +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -5344,6 +6735,13 @@ wordwrap@~0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -5352,6 +6750,15 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -5413,11 +6820,29 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^13.1.0: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -5425,6 +6850,23 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.0" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" From e741ceea7f660e50c3a96b4d21d897c1908a6911 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 9 Mar 2020 10:44:48 -0700 Subject: [PATCH 0172/1298] fix obsoleteAttr() issue --- Gruntfile.js | 2 +- src/gridstack-extra.scss | 2 +- src/utils.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 4c56e9c3b..f63dd0319 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -44,9 +44,9 @@ module.exports = function(grunt) { 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], 'dist/jquery.js': ['src/jquery.js'], 'dist/jquery-ui.js': ['src/jquery-ui.js'], +*/ 'dist/src/gridstack.scss': ['src/gridstack.scss'], 'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'], -*/ } } }, diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 6fe02327d..b0c962843 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -6,8 +6,8 @@ */ // default to generate [2-11] columns as 1 (oneColumnMode) and 12 (default) are in the main css -$gridstack-columns: 11 !default; $gridstack-columns-start: 2 !default; +$gridstack-columns: 11 !default; @mixin grid-stack-items($columns) { .grid-stack.grid-stack-#{$columns} { diff --git a/src/utils.ts b/src/utils.ts index 22aba9baf..2ea0300f1 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -38,7 +38,7 @@ export function obsoleteOptsDel(opts: GridstackOptions, oldName: string, rev: st /** checks for obsolete Jquery element attributes */ export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string) { const oldAttr = el.getAttribute(oldName); - if (oldAttr !== undefined) { + if (oldAttr !== null) { el.setAttribute(newName, oldAttr); console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' + newName + '`. It will be **completely** removed in v1.0'); From def3297dd76518edccab45983910a0056f364044 Mon Sep 17 00:00:00 2001 From: Bujorel Tecu Date: Sun, 8 Mar 2020 22:30:44 -0400 Subject: [PATCH 0173/1298] Export global `GridStack` Fix missing `mode` warning Replace `tslint` with `eslint` --- .eslintrc.js | 22 ++++++++++++++ .eslintrc.json | 20 ------------- package.json | 9 +++--- webpack.config.js | 8 +++-- yarn.lock | 76 +++++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 104 insertions(+), 31 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..76b691f34 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,22 @@ +module.exports = { + parser: '@typescript-eslint/parser', + env: { + browser: true, + commonjs: true, + es6: true, + node: true + }, + extends: [ + 'plugin:@typescript-eslint/recommended' + ], + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module' + }, + rules: { + 'indent': ['error', 2], + 'max-len': ['error', 180], + 'no-trailing-spaces': 'error', + 'prefer-const': 0 + } +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index e505744ea..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true - }, - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "sourceType": "module" - }, - "rules": { - "indent": ["error", 2], - "max-len": ["error", 180], - "camelcase": "error", - "no-trailing-spaces": "error" - } -} \ No newline at end of file diff --git a/package.json b/package.json index e9cc5e73f..18281783e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "web": "rm -rf dist/* && webpack", "test": "yarn lint && karma start karma.conf.js", - "lint": "tslint -p ./tsconfig.json", + "lint": "tsc --noEmit && eslint 'src/**/*.ts'", "reset": "rm -rf dist node_modules", "prepublishOnly": "yarn build" }, @@ -45,10 +45,13 @@ "devDependencies": { "@types/jquery": "^3.3.32", "@types/jqueryui": "^1.12.10", + "@typescript-eslint/eslint-plugin": "^2.23.0", + "@typescript-eslint/parser": "^2.23.0", "connect": "^3.7.0", "core-js": "^3.6.4", "coveralls": "^3.0.9", "doctoc": "^1.4.0", + "eslint": "^6.8.0", "grunt": "^1.0.4", "grunt-cli": "^1.3.2", "grunt-contrib-connect": "^2.1.0", @@ -73,9 +76,5 @@ "typescript": "3.4.5", "webpack": "^4.42.0", "webpack-cli": "^3.3.11" - }, - "resolutions": { - "lodash": "^4.17.13", - "js-yaml": "^3.13.1" } } diff --git a/webpack.config.js b/webpack.config.js index 0d3c46ae2..55e2cce96 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,6 +2,7 @@ const path = require('path'); module.exports = { entry: './src/index.ts', + mode: 'development', module: { rules: [ { @@ -17,7 +18,8 @@ module.exports = { output: { filename: 'gridstack.all.js', path: path.resolve(__dirname, 'dist'), + library: 'GridStack', + libraryExport: 'GridStack', libraryTarget: 'umd', - library: 'gridstack', - }, -}; \ No newline at end of file + } +}; diff --git a/yarn.lock b/yarn.lock index 33cb2254d..bda4f943d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,6 +107,11 @@ traverse "^0.6.6" unified "^6.1.6" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/jquery@*", "@types/jquery@^3.3.32": version "3.3.33" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9" @@ -121,6 +126,11 @@ dependencies: "@types/jquery" "*" +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + "@types/mime-types@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" @@ -141,6 +151,49 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== +"@typescript-eslint/eslint-plugin@^2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.23.0.tgz#aa7133bfb7b685379d9eafe4ae9e08b9037e129d" + integrity sha512-8iA4FvRsz8qTjR0L/nK9RcRUN3QtIHQiOm69FzV7WS3SE+7P7DyGGwh3k4UNR2JBbk+Ej2Io+jLAaqKibNhmtw== + dependencies: + "@typescript-eslint/experimental-utils" "2.23.0" + eslint-utils "^1.4.3" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.23.0.tgz#5d2261c8038ec1698ca4435a8da479c661dc9242" + integrity sha512-OswxY59RcXH3NNPmq+4Kis2CYZPurRU6mG5xPcn24CjFyfdVli5mySwZz/g/xDbJXgDsYqNGq7enV0IziWGXVQ== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.23.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.23.0.tgz#f3d4e2928ff647fe77fc2fcef1a3534fee6a3212" + integrity sha512-k61pn/Nepk43qa1oLMiyqApC6x5eP5ddPz6VUYXCAuXxbmRLqkPYzkFRKl42ltxzB2luvejlVncrEpflgQoSUg== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.23.0" + "@typescript-eslint/typescript-estree" "2.23.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.23.0": + version "2.23.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.23.0.tgz#d355960fab96bd550855488dcc34b9a4acac8d36" + integrity sha512-pmf7IlmvXdlEXvE/JWNNJpEvwBV59wtJqA8MLAxMKLXNKVRC3HZBXR/SlZLPWTCcwOSg9IM7GeRSV3SIerGVqw== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -1889,7 +1942,7 @@ eslint-visitor-keys@^1.1.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.0.1: +eslint@^6.0.1, eslint@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -2531,7 +2584,7 @@ glob@^5.0.15, glob@~5.0.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -5106,6 +5159,11 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + remark-frontmatter@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz#91d9684319cd1b96cc3d9d901f10a978f39c752d" @@ -5416,7 +5474,7 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.2: +semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -6202,11 +6260,23 @@ ts-loader@^6.2.1: micromatch "^4.0.0" semver "^6.0.0" +tslib@^1.8.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + tslib@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" From 1ddf1ba2c0b4cf6305a32482a76c4ab7cf51422a Mon Sep 17 00:00:00 2001 From: Bujorel Tecu Date: Sun, 8 Mar 2020 22:31:05 -0400 Subject: [PATCH 0174/1298] Replace some `jQuery` --- src/gridstack.ts | 382 ++++++++++++++++++++++++++++++----------------- src/utils.ts | 52 ++++--- 2 files changed, 272 insertions(+), 162 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index f298c4958..2bc195d46 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -55,10 +55,10 @@ export class GridStack { * multiple grids initialization at once. * @param options grid options (optional) * @param elOrString element to convert to a grid (default to '.grid-stack' class selector) - * + * * @example * const grid = GridStack.init(); - * + * * Note: the HTMLElement (of type GridHTMLElement) will store a `gridstack: GridStack` value that can be retrieve later * const grid = document.querySelector('.grid-stack').gridstack; */ @@ -83,7 +83,7 @@ export class GridStack { * Will initialize a list of elements (given a selector) and return an array of grids. * @param options grid options (optional) * @param selector element to convert to grids (default to '.grid-stack' class selector) - * + * * @example * const grids = GridStack.initAll(); * grids.forEach(...) @@ -113,6 +113,7 @@ export class GridStack { public opts: GridstackOptions; /** @internal */ + private placeholder: HTMLElement; private $el: JQuery; // TODO: legacy code private $placeholder: JQuery; private oneColumnMode: boolean; @@ -128,11 +129,9 @@ export class GridStack { * @param el * @param opts */ - public constructor(el: GridStackElement, opts: GridstackOptions) { - opts = opts || {}; - + public constructor(el: GridHTMLElement, opts: GridstackOptions = { }) { this.$el = $(el); // legacy code - this.el = this.$el.get(0); // exposed HTML element to the user + this.el = el; // exposed HTML element to the user obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); @@ -150,13 +149,14 @@ export class GridStack { opts.minRow = opts.maxRow = opts.row; delete opts.row; } - const rowAttr = parseInt(this.$el.attr('data-gs-row')); + + const rowAttr = Utils.toNumber(el.getAttribute('data-gs-row')); // elements attributes override any passed options (like CSS style) - merge the two together const defaults: GridstackOptions = { - column: parseInt(this.$el.attr('data-gs-column')) || 12, - minRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-min-row')) || 0, - maxRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-max-row')) || 0, + column: Utils.toNumber(el.getAttribute('data-gs-column')) || 12, + minRow: rowAttr ? rowAttr : Utils.toNumber(el.getAttribute('data-gs-min-row')) || 0, + maxRow: rowAttr ? rowAttr : Utils.toNumber(el.getAttribute('data-gs-max-row')) || 0, itemClass: 'grid-stack-item', placeholderClass: 'grid-stack-placeholder', placeholderText: '', @@ -169,7 +169,7 @@ export class GridStack { float: false, staticGrid: false, _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), - animate: Boolean(this.$el.attr('data-gs-animate')) || false, + animate: Utils.toBool(el.getAttribute('data-gs-animate')) || false, alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, resizable: Utils.defaults(opts.resizable || {}, { autoHide: !(opts.alwaysShowResizeHandle || false), @@ -195,6 +195,7 @@ export class GridStack { oneColumnModeDomSort: opts.oneColumnModeDomSort, ddPlugin: null }; + this.opts = Utils.defaults(opts, defaults); if (this.opts.ddPlugin === false) { @@ -207,18 +208,21 @@ export class GridStack { if (this.opts.rtl === 'auto') { this.opts.rtl = this.$el.css('direction') === 'rtl'; + this.opts.rtl = el.style.direction === 'rtl'; } if (this.opts.rtl) { this.$el.addClass('grid-stack-rtl'); + this.el.classList.add('grid-stack-rtl'); } this.opts._isNested = this.$el.closest('.' + opts.itemClass).length > 0; if (this.opts._isNested) { this.$el.addClass('grid-stack-nested'); + this.el.classList.add('grid-stack-nested'); } - this.isAutoCellHeight = (this.opts.cellHeight === 'auto'); + this.isAutoCellHeight = this.opts.cellHeight === 'auto'; if (this.isAutoCellHeight) { // make the cell square initially this.cellHeight(this.cellWidth(), true); @@ -228,6 +232,7 @@ export class GridStack { this.verticalMargin(this.opts.verticalMargin, true); this.$el.addClass(this.opts._class); + this.el.classList.add(this.opts._class); this._setStaticClass(); @@ -246,12 +251,12 @@ export class GridStack { .attr('data-gs-y', n.y) .attr('data-gs-width', n.width) .attr('data-gs-height', n.height); - } - }); - this._updateStyles(maxHeight + 10); - }, - this.opts.float, - this.opts.maxRow); + } + }); + this._updateStyles(maxHeight + 10); + }, + this.opts.float, + this.opts.maxRow); if (this.opts.auto) { const elements = []; @@ -276,9 +281,19 @@ export class GridStack { '
    ' + '
    ' + this.opts.placeholderText + '
    ').hide(); + let placeholderChild = document.createElement('div'); + placeholderChild.className = 'placeholder-content'; + + let placeholder = document.createElement('div'); + placeholder.classList.add(this.opts.placeholderClass, this.opts.itemClass); + placeholder.style.display = 'none' + placeholder.appendChild(placeholderChild); + + this.placeholder = placeholder; + this._updateContainerHeight(); - $(window).resize(this.onResizeHandler); + $(window).resize(this.onResizeHandler.bind(this)); this.onResizeHandler(); if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { @@ -293,7 +308,7 @@ export class GridStack { if (!node || node._grid !== this) { return; } - el.data('inTrashZone', true); + el.dataset.inTrashZone = true; this._setupRemovingTimeout(el); }) .on(trashZone, 'dropout', (event, ui) => { @@ -302,7 +317,7 @@ export class GridStack { if (!node || node._grid !== this) { return; } - el.data('inTrashZone', false); + el.dataset.inTrashZone = false; this._clearRemovingTimeout(el); }); } @@ -328,7 +343,7 @@ export class GridStack { public addWidget(el: GridStackElement, options? : GridstackWidget): HTMLElement; /** - * Creates new widget and returns it. + * Creates new widget and returns it. * Legacy: Spelled out version of the widgets options, recommend use new version instead. * * @example @@ -349,28 +364,35 @@ export class GridStack { */ public addWidget(el: GridStackElement, x? : number | GridstackWidget, y?: number, width?: number, height?: number, autoPosition?: boolean, minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number, id?: numberOrString): HTMLElement { - // new way of calling with an object - make sure all items have been properly initialized - if (x === undefined || typeof x === 'object') { - // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos - // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. - // opt = this.engine._prepareNode(opt); - x = x || {}; - } else { - // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) - return this.addWidget(el, {x: x, y: y, width: width, height: height, autoPosition: autoPosition, - minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id}); - } + // new way of calling with an object - make sure all items have been properly initialized + if (x === undefined || typeof x === 'object') { + // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos + // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. + // opt = this.engine._prepareNode(opt); + x = (x || { }) as GridstackWidget; + } else { + // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) + return this.addWidget(el, { x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id }); + } - const $el = $(el); - this._writeAttr(el, x); - this.$el.append(el); - return this.makeWidget(el); + if (typeof el === 'string') { + let doc = document.implementation.createHTMLDocument(); + doc.body.innerHTML = el; + el = doc.body.children[0] as HTMLElement; } + // const $el = $(el); + this._writeAttr(el, x); + this.$el.append(el); + this.el.appendChild(el); + + return this.makeWidget(el); + } + /** * Initializes batch updates. You will see no changes until `commit()` method is called. */ - public batchUpdate() { + public batchUpdate(): void { this.engine.batchUpdate(); } @@ -382,10 +404,16 @@ export class GridStack { return this.opts.cellHeight as number; } // compute the height taking margin into account (each row has margin other than last one) - const o = this.$el.children('.' + this.opts.itemClass).first(); - const height = parseInt(o.attr('data-gs-height')); - const verticalMargin = this.opts.verticalMargin as number; - return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); + // const o = this.$el.children('.' + this.opts.itemClass).first(); + // const height = parseInt(o.attr('data-gs-height')); + // const verticalMargin = this.opts.verticalMargin as number; + // return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); + + let el = this.el.querySelector(`.${this.opts.itemClass}`) as HTMLElement; + let height = Utils.toNumber(el.getAttribute('data-gs-height')); + let verticalMargin = this.opts.verticalMargin as number; + + return Math.round((el.offsetHeight - (height - 1) * verticalMargin) / height); } /** @@ -399,7 +427,7 @@ export class GridStack { * @example * grid.cellHeight(grid.cellWidth() * 1.2); */ - public cellHeight(val: numberOrString, noUpdate?: boolean) { + public cellHeight(val: numberOrString, noUpdate?: boolean): void { const heightData = Utils.parseHeight(val); if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { return ; @@ -423,7 +451,7 @@ export class GridStack { /** * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate. */ - public commit() { + public commit(): void { this.engine.commit(); this._triggerRemoveEvent(); this._triggerAddEvent(); @@ -431,7 +459,7 @@ export class GridStack { }; /** re-layout grid items to reclaim any empty space */ - public compact() { + public compact(): void { this.engine.compact(); this._triggerChangeEvent(); } @@ -442,7 +470,7 @@ export class GridStack { * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11], * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns) * @param column - Integer > 0 (default 12). - * @param doNotPropagate if true existing widgets will not be updated (optional) + * @param doNotPropagate if true existing widgets will not be updated (optional) */ public column(column: number, doNotPropagate?: boolean) { if (this.opts.column === column) { return; } @@ -489,7 +517,7 @@ export class GridStack { * Destroys a grid instance. * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). */ - public destroy(detachGrid?: boolean) { + public destroy(detachGrid?: boolean): void { $(window).off('resize', this.onResizeHandler); this.disable(); if (detachGrid !== undefined && !detachGrid) { @@ -510,7 +538,7 @@ export class GridStack { * grid.enableMove(false); * grid.enableResize(false); */ - public disable() { + public disable(): void { this.enableMove(false); this.enableResize(false); this.$el.trigger('disable'); @@ -522,7 +550,7 @@ export class GridStack { * grid.enableMove(true); * grid.enableResize(true); */ - public enable() { + public enable(): void { this.enableMove(true); this.enableResize(true); this.$el.trigger('enable'); @@ -535,10 +563,11 @@ export class GridStack { * @param includeNewWidgets will force new widgets to be draggable as per * doEnable`s value by changing the disableDrag grid option (default: true). */ - public enableMove(doEnable: boolean, includeNewWidgets = true) { + public enableMove(doEnable: boolean, includeNewWidgets = true): void { this.$el.children('.' + this.opts.itemClass).each((index, el) => { this.movable(el, doEnable); - }) + }); + if (includeNewWidgets) { this.opts.disableDrag = !doEnable; } @@ -566,7 +595,7 @@ export class GridStack { this.engine.float = val; this._triggerChangeEvent(); } - + /** * get the current float mode */ @@ -643,11 +672,16 @@ export class GridStack { * grid.makeWidget('gsi-1'); */ public makeWidget(el: GridStackElement): HTMLElement { + if (typeof el === 'string') { + el = document.querySelector(`#${el}`) as HTMLElement; + } + this._prepareElement(el, true); this._updateContainerHeight(); this._triggerAddEvent(); this._triggerChangeEvent(); - return $(el).get(0); + + return el; } /** @@ -754,7 +788,7 @@ export class GridStack { * @param x new position x. If value is null or undefined it will be ignored. * @param y new position y. If value is null or undefined it will be ignored. */ - public move(el: GridStackElement, x: number, y: number) { + public move(el: GridStackElement, x: number, y: number): void { this._updateElement(el, (el, node) => { x = (x !== null && x !== undefined) ? x : node.x; y = (y !== null && y !== undefined) ? y : node.y; @@ -769,16 +803,16 @@ export class GridStack { * @param name of the event (see possible values) or list of names space separated * @param callback function called with event and optional second/third param * (see README documentation for each signature). - * + * * @example * grid.on('added', function(e, items) { log('added ', items)} ); * or * grid.on('added removed change', function(e, items) { log(e.type, items)} ); - * + * * Note: in some cases it is the same as calling native handler and parsing the event. * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} ); */ - public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void) { + public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Record, arg3?: Record) => void) { if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { // native CustomEvent handlers - cash the generic handlers so we can remove const noData = (eventName === 'enable' || eventName === 'disable'); @@ -852,7 +886,7 @@ export class GridStack { * @param width new dimensions width. If value is null or undefined it will be ignored. * @param height new dimensions height. If value is null or undefined it will be ignored. */ - public resize(el: GridStackElement, width: number, height: number) { + public resize(el: GridStackElement, width: number, height: number): void { this._updateElement(el, (el, node) => { width = (width !== null && width !== undefined) ? width : node.width; height = (height !== null && height !== undefined) ? height : node.height; @@ -884,11 +918,13 @@ export class GridStack { * Toggle the grid animation state. Toggles the `grid-stack-animate` class. * @param doAnimate if true the grid will animate. */ - public setAnimation(doAnimate: boolean) { + public setAnimation(doAnimate: boolean): void { if (doAnimate) { this.$el.addClass('grid-stack-animate'); + this.el.classList.add('grid-stack-animate'); } else { this.$el.removeClass('grid-stack-animate'); + this.el.classList.remove('grid-stack-animate'); } } @@ -896,8 +932,8 @@ export class GridStack { * Toggle the grid static state. Also toggle the grid-stack-static class. * @param staticValue if true the grid become static. */ - public setStatic(staticValue: boolean) { - this.opts.staticGrid = (staticValue === true); + public setStatic(staticValue: boolean): void { + this.opts.staticGrid = staticValue === true; this.enableMove(!staticValue); this.enableResize(!staticValue); this._setStaticClass(); @@ -911,7 +947,7 @@ export class GridStack { * @param width new dimensions width. If value is null or undefined it will be ignored. * @param height new dimensions height. If value is null or undefined it will be ignored. */ - public update(el: GridStackElement, x: number, y: number, width: number, height: number) { + public update(el: GridStackElement, x: number, y: number, width: number, height: number): void { this._updateElement(el, (el, node) => { x = (x !== null && x !== undefined) ? x : node.x; y = (y !== null && y !== undefined) ? y : node.y; @@ -928,7 +964,7 @@ export class GridStack { * @param value new vertical margin value * @param noUpdate (optional) if true, styles will not be updated */ - public verticalMargin(value: numberOrString, noUpdate?: boolean) { + public verticalMargin(value: numberOrString, noUpdate?: boolean): void { const heightData = Utils.parseHeight(value); if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) { @@ -969,7 +1005,7 @@ export class GridStack { return this.engine.canBePlacedWithRespectToHeight(node); } - private _triggerChangeEvent(skipLayoutChange?: boolean) { + private _triggerChangeEvent(skipLayoutChange?: boolean): void { if (this.engine.batchMode) { return; } const elements = this.engine.getDirtyNodes(true); // verify they really changed if (elements && elements.length) { @@ -1060,7 +1096,7 @@ export class GridStack { } if (maxHeight > this._styles._max) { - for (var i = this._styles._max; i < maxHeight; ++i) { + for (let i = this._styles._max; i < maxHeight; ++i) { Utils.insertCSSRule(this._styles, prefix + '[data-gs-height="' + (i + 1) + '"]', 'height: ' + getHeight(i + 1, i) + ';', @@ -1141,8 +1177,6 @@ export class GridStack { * prepares the element for drag&drop **/ private _prepareElementsByNode(el, node) { - el = $(el) - // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth; let cellFullHeight; // internal cellHeight + v-margin @@ -1151,20 +1185,33 @@ export class GridStack { /** called when item starts moving/resizing */ const onStartMoving = function(event, ui) { self.$el.append(self.$placeholder); + self.el.append(self.placeholder); self.engine.cleanNodes(); self.engine.beginUpdate(node); cellWidth = self.cellWidth(); const strictCellHeight = self.getCellHeight(); // heigh without v-margin // compute height with v-margin (Note: we add 1 margin as last row is missing it) cellFullHeight = (self.$el.height() + self.getVerticalMargin()) / parseInt(self.$el.attr('data-gs-current-row')); - const o = $(this); + + let { target } = event; + // const o = $(this); + + self.$placeholder - .attr('data-gs-x', o.attr('data-gs-x')) - .attr('data-gs-y', o.attr('data-gs-y')) - .attr('data-gs-width', o.attr('data-gs-width')) - .attr('data-gs-height', o.attr('data-gs-height')) + .attr('data-gs-x', target.getAttribute('data-gs-x')) + .attr('data-gs-y', target.getAttribute('data-gs-y')) + .attr('data-gs-width', target.getAttribute('data-gs-width')) + .attr('data-gs-height', target.getAttribute('data-gs-height')) .show(); + + self.placeholder.setAttribute('data-gs-x', target.getAttribute('data-gs-x')); + self.placeholder.setAttribute('data-gs-y', target.getAttribute('data-gs-y')); + self.placeholder.setAttribute('data-gs-width', target.getAttribute('data-gs-width')); + self.placeholder.setAttribute('data-gs-height', target.getAttribute('data-gs-height')); + self.placeholder.style.display = ''; + node.el = self.$placeholder.get(0); + // node.el = self.placeholder; node._beforeDragX = node.x; node._beforeDragY = node.y; node._prevYPix = ui.position.top; @@ -1176,7 +1223,14 @@ export class GridStack { self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin); if (event.type === 'resizestart') { - o.find('.grid-stack-item').trigger('resizestart'); + let itemElement = target.querySelector('.grid-stack-item'); + if (itemElement) { + let ev = document.createEvent('HTMLEvents'); + ev.initEvent('resizestart', true, false); + target.querySelector('.grid-stack-item').dispatchEvent(event); + } + + // o.find('.grid-stack-item').trigger('resizestart'); } } @@ -1190,8 +1244,8 @@ export class GridStack { if (event.type === 'drag') { const distance = ui.position.top - node._prevYPix; node._prevYPix = ui.position.top; - Utils.updateScrollPosition(el[0], ui, distance); - if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 || + Utils.updateScrollPosition(el, ui, distance); + if (el.dataset.inTrashZone || x < 0 || x >= self.engine.column || y < 0 || (!self.engine.float && y > self.engine.getRow())) { if (!node._temporaryRemoved) { if (self.opts.removable === true) { @@ -1252,60 +1306,80 @@ export class GridStack { } /** called when the item stops moving/resizing */ - const onEndMoving = function(event, ui) { - const o = $(this); - if (!o.get(0).gridstackNode) { + const onEndMoving = function(event): void { + let { target } = event; + // const o = $(this); + if (!target.gridstackNode) { return; } // const forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? self.$placeholder.detach(); - node.el = o.get(0); + node.el = target; // o.get(0); self.$placeholder.hide(); if (node._isAboutToRemove) { // forceNotify = true; - const gridToNotify = el.get(0).gridstackNode._grid; + const gridToNotify = el.gridstackNode._grid; gridToNotify._triggerRemoveEvent(); - delete el.get(0).gridstackNode; + delete el.gridstackNode; el.remove(); } else { self._clearRemovingTimeout(el); if (!node._temporaryRemoved) { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); + Utils.removePositioningStyles(target); + target.setAttribute('data-gs-x', node.x); + target.setAttribute('data-gs-y', node.y); + target.setAttribute('data-gs-width', node.width); + target.setAttribute('data-gs-height', node.height); + // o + // .attr('data-gs-x', node.x) + // .attr('data-gs-y', node.y) + // .attr('data-gs-width', node.width) + // .attr('data-gs-height', node.height); } else { - Utils.removePositioningStyles(o); - o - .attr('data-gs-x', node._beforeDragX) - .attr('data-gs-y', node._beforeDragY) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height); + // Utils.removePositioningStyles(o); + // o + // .attr('data-gs-x', node._beforeDragX) + // .attr('data-gs-y', node._beforeDragY) + // .attr('data-gs-width', node.width) + // .attr('data-gs-height', node.height); + Utils.removePositioningStyles(target); + target.setAttribute('data-gs-x', node._beforeDragX); + target.setAttribute('data-gs-y', node._beforeDragY); + target.setAttribute('data-gs-width', node.width); + target.setAttribute('data-gs-height', node.height); + node.x = node._beforeDragX; node.y = node._beforeDragY; node._temporaryRemoved = false; self.engine.addNode(node); } } + self._updateContainerHeight(); self._triggerChangeEvent(); self.engine.endUpdate(); - const nestedGrids = o.find('.grid-stack'); + // const nestedGrids = o.find('.grid-stack'); + let nestedGrids = target.querySelectorAll('.grid-stack'); if (nestedGrids.length && event.type === 'resizestop') { nestedGrids.each((index, el) => { el.gridstack.onResizeHandler(); }); - o.find('.grid-stack-item').trigger('resizestop'); - o.find('.grid-stack-item').trigger('gsresizestop'); + + self._triggerNativeEvent(target, '.grid-stack-item', 'resizestop'); + self._triggerNativeEvent(target, '.grid-stack-item', 'gsresizestop'); + + // o.find('.grid-stack-item').trigger('resizestop'); + // o.find('.grid-stack-item').trigger('gsresizestop'); } + if (event.type === 'resizestop') { - self.$el.trigger('gsresizestop', o); + self._triggerNativeEvent(self.el, null, 'gsresizestop'); + + // self.$el.trigger('gsresizestop', o); } } @@ -1324,67 +1398,97 @@ export class GridStack { if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) { this.dd.draggable(el, 'disable'); } + if (node.noResize || this.opts.disableResize || this.opts.staticGrid) { this.dd.resizable(el, 'disable'); } + this._writeAttr(el, node); } - private _prepareElement(el, triggerAddEvent?: boolean) { + _triggerNativeEvent(el: HTMLElement, selector: string, eventName: string): void { + let elements = el.querySelectorAll(selector); + if (elements.length) { + let event = document.createEvent('HTMLEvents'); + event.initEvent(eventName, true, false); + + Array.from(elements).map(x => x.dispatchEvent(event)); + } + } + + private _prepareElement(el: GridItemHTMLElement, triggerAddEvent?: boolean): void { triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false; - el = $(el); + // el = $(el); - el.addClass(this.opts.itemClass); - let node = this._readAttr(el, {el: el.get(0), _grid: this}); + el.classList.add(this.opts.itemClass); + // TODO: What was being passed in as widget here? + // let node = this._readAttr(el, { el, _grid: this }); + let node = this._readAttr(el, { }); node = this.engine.addNode(node, triggerAddEvent); - el.get(0).gridstackNode = node; + el.gridstackNode = node; this._prepareElementsByNode(el, node); } /** call to write any default attributes back to element */ - private _writeAttr(el, node) { - const $el = $(el); - node = node || {} - // Note: passing null removes the attr in jquery - if (node.x !== undefined) { el.attr('data-gs-x', node.x); } - if (node.y !== undefined) { el.attr('data-gs-y', node.y); } - if (node.width !== undefined) { el.attr('data-gs-width', node.width); } - if (node.height !== undefined) { el.attr('data-gs-height', node.height); } - if (node.autoPosition !== undefined) { el.attr('data-gs-auto-position', node.autoPosition ? true : null); } - if (node.minWidth !== undefined) { el.attr('data-gs-min-width', node.minWidth); } - if (node.maxWidth !== undefined) { el.attr('data-gs-max-width', node.maxWidth); } - if (node.minHeight !== undefined) { el.attr('data-gs-min-height', node.minHeight); } - if (node.maxHeight !== undefined) { el.attr('data-gs-max-height', node.maxHeight); } - if (node.noResize !== undefined) { el.attr('data-gs-no-resize', node.noResize ? true : null); } - if (node.noMove !== undefined) { el.attr('data-gs-no-move', node.noMove ? true : null); } - if (node.locked !== undefined) { el.attr('data-gs-locked', node.locked ? true : null); } - if (node.resizeHandles !== undefined) { el.attr('data-gs-resize-handles', node.resizeHandles); } - if (node.id !== undefined) { el.attr('data-gs-id', node.id); } + private _writeAttr(el: HTMLElement, node: GridstackWidget = { }): void { + if (node.x !== undefined) { el.setAttribute('data-gs-x', `${node.x}`); } + if (node.y !== undefined) { el.setAttribute('data-gs-y', `${node.y}`); } + if (node.width !== undefined) { el.setAttribute('data-gs-width', `${node.width}`); } + if (node.height !== undefined) { el.setAttribute('data-gs-height', `${node.height}`); } + if (node.autoPosition) { + el.setAttribute('data-gs-auto-position', 'true'); + } else { + el.removeAttribute('data-gs-auto-position'); + } + + if (node.minWidth !== undefined) { el.setAttribute('data-gs-min-width', `${node.minWidth}`); } + if (node.maxWidth !== undefined) { el.setAttribute('data-gs-max-width', `${node.maxWidth}`); } + if (node.minHeight !== undefined) { el.setAttribute('data-gs-min-height', `${node.minHeight}`); } + if (node.maxHeight !== undefined) { el.setAttribute('data-gs-max-height', `${node.maxHeight}`); } + if (node.noResize) { + el.setAttribute('data-gs-no-resize', 'true'); + } else { + el.removeAttribute('data-gs-no-resize'); + } + + if (node.noMove) { + el.setAttribute('data-gs-no-move', 'true'); + } else { + el.removeAttribute('data-gs-no-move'); + } + + if (node.locked) { + el.setAttribute('data-gs-locked', 'true'); + } else { + el.removeAttribute('data-gs-locked'); + } + + if (node.resizeHandles !== undefined) { el.setAttribute('data-gs-resize-handles', node.resizeHandles); } + if (node.id !== undefined) { el.setAttribute('data-gs-id', `${node.id}`); } } /** call to write any default attributes back to element */ - private _readAttr(el, node) { - const $el = $(el); - node = node || {}; - node.x = el.attr('data-gs-x'); - node.y = el.attr('data-gs-y'); - node.width = el.attr('data-gs-width'); - node.height = el.attr('data-gs-height'); - node.autoPosition = Utils.toBool(el.attr('data-gs-auto-position')); - node.maxWidth = el.attr('data-gs-max-width'); - node.minWidth = el.attr('data-gs-min-width'); - node.maxHeight = el.attr('data-gs-max-height'); - node.minHeight = el.attr('data-gs-min-height'); - node.noResize = Utils.toBool(el.attr('data-gs-no-resize')); - node.noMove = Utils.toBool(el.attr('data-gs-no-move')); - node.locked = Utils.toBool(el.attr('data-gs-locked')); - node.resizeHandles = el.attr('data-gs-resize-handles'); - node.id = el.attr('data-gs-id'); + private _readAttr(el: HTMLElement, node: GridstackWidget = { }): GridstackWidget { + node.x = Utils.toNumber(el.getAttribute('data-gs-x')); + node.y = Utils.toNumber(el.getAttribute('data-gs-y')); + node.width = Utils.toNumber(el.getAttribute('data-gs-width')); + node.height = Utils.toNumber(el.getAttribute('data-gs-height')); + node.maxWidth = Utils.toNumber(el.getAttribute('data-gs-max-width')); + node.minWidth = Utils.toNumber(el.getAttribute('data-gs-min-width')); + node.maxHeight = Utils.toNumber(el.getAttribute('data-gs-max-height')); + node.minHeight = Utils.toNumber(el.getAttribute('data-gs-min-height')); + node.autoPosition = Utils.toBool(el.getAttribute('data-gs-auto-position')); + node.noResize = Utils.toBool(el.getAttribute('data-gs-no-resize')); + node.noMove = Utils.toBool(el.getAttribute('data-gs-no-move')); + node.locked = Utils.toBool(el.getAttribute('data-gs-locked')); + node.resizeHandles = el.getAttribute('data-gs-resize-handles'); + node.id = el.getAttribute('data-gs-id'); + return node; } - private _updateElement(el, callback) { + private _updateElement(el, callback): void { el = $(el).first(); const node = el.gridstackNode; if (!node) { return; } diff --git a/src/utils.ts b/src/utils.ts index 2ea0300f1..bf9e95fe3 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -49,10 +49,10 @@ export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, /** * Utility methods */ -export namespace Utils { +export class Utils { /** returns true if a and b overlap */ - export function isIntercepted(a: GridstackWidget, b: GridstackWidget): boolean { + static isIntercepted(a: GridstackWidget, b: GridstackWidget): boolean { return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); } @@ -62,19 +62,19 @@ export namespace Utils { * @param dir 1 for asc, -1 for desc (optional) * @param width width of the grid. If undefined the width will be calculated automatically (optional). **/ - export function sort(nodes: GridStackNode[], dir?: number, column?: number): GridStackNode[] { + static sort(nodes: GridStackNode[], dir?: number, column?: number): GridStackNode[] { if (!column) { const widths = nodes.map(function (node) { return node.x + node.width; }); column = Math.max.apply(Math, widths); } if (dir === -1) - return sortBy(nodes, (n) => -(n.x + n.y * column)); + return this.sortBy(nodes, (n) => -(n.x + n.y * column)); else - return sortBy(nodes, (n) => (n.x + n.y * column)); + return this.sortBy(nodes, (n) => (n.x + n.y * column)); } - export function createStylesheet(id: string, parent?: HTMLElement): CSSStyleSheet { + static createStylesheet(id: string, parent?: HTMLElement): CSSStyleSheet { const style: HTMLStyleElement = document.createElement('style'); style.setAttribute('type', 'text/css'); style.setAttribute('data-gs-style-id', id); @@ -88,13 +88,13 @@ export namespace Utils { return style.sheet as CSSStyleSheet; } - export function removeStylesheet(id: string) { + static removeStylesheet(id: string) { const el = document.querySelector('STYLE[data-gs-style-id=' + id + ']'); if (!el) return; el.parentNode.removeChild(el); } - export function insertCSSRule(sheet: CSSStyleSheet, selector: string, rules: string, index: number) { + static insertCSSRule(sheet: CSSStyleSheet, selector: string, rules: string, index: number) { if (typeof sheet.insertRule === 'function') { sheet.insertRule(selector + '{' + rules + '}', index); } else if (typeof sheet.addRule === 'function') { @@ -102,7 +102,7 @@ export namespace Utils { } } - export function toBool(v: any): boolean { + static toBool(v: any): boolean { if (typeof v === 'boolean') { return v; } @@ -113,7 +113,13 @@ export namespace Utils { return Boolean(v); } - export function parseHeight(val: numberOrString) { + static toNumber(value: null | string): number | null { + return value === null || value.length === 0 + ? null + : Number(value); + } + + static parseHeight(val: numberOrString) { let height: number; let heightUnit = 'px'; if (typeof val === 'string') { @@ -129,7 +135,7 @@ export namespace Utils { return { height: height, unit: heightUnit } } - export function without(array, item) { + static without(array, item) { const index = array.indexOf(item); if (index !== -1) { @@ -140,7 +146,7 @@ export namespace Utils { return array; } - export function sortBy(array, getter) { + static sortBy(array, getter) { return array.slice(0).sort(function (left, right) { const valueLeft = getter(left); const valueRight = getter(right); @@ -153,11 +159,11 @@ export namespace Utils { }); } - export function defaults(target, arg1) { + static defaults(target, arg1) { const sources = Array.prototype.slice.call(arguments, 1); sources.forEach(function (source) { - for (var prop in source) { + for (let prop in source) { if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { target[prop] = source[prop]; } @@ -167,11 +173,11 @@ export namespace Utils { return target; } - export function clone(target) { + static clone(target) { return {...target}; // was $.extend({}, target) } - export function throttle(callback, delay) { + static throttle(callback, delay) { let isWaiting = false; return function () { @@ -183,8 +189,8 @@ export namespace Utils { } } - export function removePositioningStyles(el) { - const style = el[0].style; + static removePositioningStyles(el) { + const style = el.style; if (style.position) { style.removeProperty('position'); } @@ -202,19 +208,19 @@ export namespace Utils { } } - export function getScrollParent(el) { + static getScrollParent(el) { let returnEl; if (el === null) { returnEl = null; } else if (el.scrollHeight > el.clientHeight) { returnEl = el; } else { - returnEl = getScrollParent(el.parentNode); + returnEl = this.getScrollParent(el.parentNode); } return returnEl; } - export function updateScrollPosition(el, ui, distance) { + static updateScrollPosition(el, ui, distance) { // is widget in view? const rect = el.getBoundingClientRect(); const innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); @@ -226,7 +232,7 @@ export namespace Utils { // to get entire widget on screen const offsetDiffDown = rect.bottom - innerHeightOrClientHeight; const offsetDiffUp = rect.top; - const scrollEl = getScrollParent(el); + const scrollEl = this.getScrollParent(el); if (scrollEl !== null) { const prevScroll = scrollEl.scrollTop; if (rect.top < 0 && distance < 0) { @@ -249,4 +255,4 @@ export namespace Utils { } } } -} \ No newline at end of file +} From d8132726a08c9f9212d9816005a5b92a669be243 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 10 Mar 2020 10:22:05 -0700 Subject: [PATCH 0175/1298] TS: more jquery removal * removed most JQ code in gridstack.ts, some harder parts remain. * changed `.${val}` to just '.'+val to make it easier to search for $ replacement * continued #1084 Note: float.html finally loads for me and add widget works! BUT drag/drop is still broken... --- demo/float.html | 4 +- demo/two.html | 2 +- src/gridstack-dragdrop-plugin.ts | 12 +- src/gridstack-engine.ts | 8 +- src/gridstack.ts | 318 +++++++++------------- src/jqueryui-gridstack-dragdrop-plugin.ts | 12 +- src/types.ts | 11 +- 7 files changed, 158 insertions(+), 209 deletions(-) diff --git a/demo/float.html b/demo/float.html index 24629d493..f1e761c14 100644 --- a/demo/float.html +++ b/demo/float.html @@ -32,8 +32,8 @@

    Float grid demo

    var grid = GridStack.init({float: true}); var items = [ - {x: 2, y: 1, width: 1, height: 1}, - {x: 2, y: 3, width: 3, height: 1}, + {x: 2, y: 1, width: 1, height: 2}, + {x: 2, y: 4, width: 3, height: 1}, {x: 4, y: 2, width: 1, height: 1}, {x: 3, y: 1, width: 1, height: 2}, {x: 0, y: 6, width: 2, height: 2} diff --git a/demo/two.html b/demo/two.html index 0d2849ac9..da0c540dc 100644 --- a/demo/two.html +++ b/demo/two.html @@ -102,7 +102,7 @@

    Two grids demo

    float: false, removable: '.trash', removeTimeout: 100, - acceptWidgets: function(i, el) { return true; } // function example, else can be simple: true | false | '.someClass' value + acceptWidgets: function(el) { return true; } // function example, else can be simple: true | false | '.someClass' value }; var grids = GridStack.initAll(options); grids[1].float(true); diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index a2107f364..b0d866edb 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -22,7 +22,7 @@ export class GridStackDragDropPlugin { static registerPlugin(pluginClass) { GridStackDragDropPlugin.registeredPlugins.push(pluginClass); - }; + } public constructor(grid: GridStack) { this.grid = grid; @@ -30,21 +30,21 @@ export class GridStackDragDropPlugin { public resizable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { return this; - }; + } public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { return this; - }; + } public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { return this; - }; + } public isDroppable(el: GridStackElement): boolean { return false; - }; + } public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin { return this; - }; + } } diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 82eec0586..dba2bb6e8 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -269,10 +269,10 @@ export class GridStackEngine { public addNode(node: GridStackNode, triggerAddEvent?: boolean) { node = this._prepareNode(node); - if (node.maxWidth !== undefined) { node.width = Math.min(node.width, node.maxWidth); } - if (node.maxHeight !== undefined) { node.height = Math.min(node.height, node.maxHeight); } - if (node.minWidth !== undefined) { node.width = Math.max(node.width, node.minWidth); } - if (node.minHeight !== undefined) { node.height = Math.max(node.height, node.minHeight); } + if (node.maxWidth) { node.width = Math.min(node.width, node.maxWidth); } + if (node.maxHeight) { node.height = Math.min(node.height, node.maxHeight); } + if (node.minWidth) { node.width = Math.max(node.width, node.minWidth); } + if (node.minHeight) { node.height = Math.max(node.height, node.minHeight); } node._id = node._id || GridStackEngine._idSeq++; diff --git a/src/gridstack.ts b/src/gridstack.ts index 2bc195d46..18733c654 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -115,7 +115,6 @@ export class GridStack { /** @internal */ private placeholder: HTMLElement; private $el: JQuery; // TODO: legacy code - private $placeholder: JQuery; private oneColumnMode: boolean; private dd: GridStackDragDropPlugin; private _prevColumn: number; @@ -129,9 +128,9 @@ export class GridStack { * @param el * @param opts */ - public constructor(el: GridHTMLElement, opts: GridstackOptions = { }) { - this.$el = $(el); // legacy code + public constructor(el: GridHTMLElement, opts: GridstackOptions = {}) { this.el = el; // exposed HTML element to the user + this.$el = $(el); // legacy code obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); @@ -207,22 +206,19 @@ export class GridStack { this.dd = new this.opts.ddPlugin(this); if (this.opts.rtl === 'auto') { - this.opts.rtl = this.$el.css('direction') === 'rtl'; this.opts.rtl = el.style.direction === 'rtl'; } if (this.opts.rtl) { - this.$el.addClass('grid-stack-rtl'); this.el.classList.add('grid-stack-rtl'); } this.opts._isNested = this.$el.closest('.' + opts.itemClass).length > 0; if (this.opts._isNested) { - this.$el.addClass('grid-stack-nested'); this.el.classList.add('grid-stack-nested'); } - this.isAutoCellHeight = this.opts.cellHeight === 'auto'; + this.isAutoCellHeight = (this.opts.cellHeight === 'auto'); if (this.isAutoCellHeight) { // make the cell square initially this.cellHeight(this.cellWidth(), true); @@ -231,7 +227,6 @@ export class GridStack { } this.verticalMargin(this.opts.verticalMargin, true); - this.$el.addClass(this.opts._class); this.el.classList.add(this.opts._class); this._setStaticClass(); @@ -243,14 +238,11 @@ export class GridStack { let maxHeight = 0; this.engine.nodes.forEach(n => { maxHeight = Math.max(maxHeight, n.y + n.height) }); cbNodes.forEach(n => { + const el = n.el; if (detachNode && n._id === null) { - if (n.el) { $(n.el).remove() } + if (el) { el.parentNode.removeChild(el) } } else { - $(n.el) - .attr('data-gs-x', n.x) - .attr('data-gs-y', n.y) - .attr('data-gs-width', n.width) - .attr('data-gs-height', n.height); + this._writeAttrs(el, n.x, n.y, n.width, n.height); } }); this._updateStyles(maxHeight + 10); @@ -277,18 +269,14 @@ export class GridStack { this.setAnimation(this.opts.animate); - this.$placeholder = $( - '
    ' + - '
    ' + this.opts.placeholderText + '
    ').hide(); - let placeholderChild = document.createElement('div'); placeholderChild.className = 'placeholder-content'; + placeholderChild.innerHTML = this.opts.placeholderText; let placeholder = document.createElement('div'); placeholder.classList.add(this.opts.placeholderClass, this.opts.itemClass); placeholder.style.display = 'none' placeholder.appendChild(placeholderChild); - this.placeholder = placeholder; this._updateContainerHeight(); @@ -303,8 +291,8 @@ export class GridStack { } this.dd .on(trashZone, 'dropover', (event, ui) => { - const el = $(ui.draggable); - const node = el.get(0).gridstackNode; + const el = $(ui.draggable).get(0); + const node = el.gridstackNode; if (!node || node._grid !== this) { return; } @@ -312,8 +300,8 @@ export class GridStack { this._setupRemovingTimeout(el); }) .on(trashZone, 'dropout', (event, ui) => { - const el = $(ui.draggable); - const node = el.get(0).gridstackNode; + const el = $(ui.draggable).get(0); + const node = el.gridstackNode; if (!node || node._grid !== this) { return; } @@ -369,7 +357,7 @@ export class GridStack { // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. // opt = this.engine._prepareNode(opt); - x = (x || { }) as GridstackWidget; + x = (x || {}) as GridstackWidget; } else { // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) return this.addWidget(el, { x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id }); @@ -381,9 +369,7 @@ export class GridStack { el = doc.body.children[0] as HTMLElement; } - // const $el = $(el); this._writeAttr(el, x); - this.$el.append(el); this.el.appendChild(el); return this.makeWidget(el); @@ -404,14 +390,9 @@ export class GridStack { return this.opts.cellHeight as number; } // compute the height taking margin into account (each row has margin other than last one) - // const o = this.$el.children('.' + this.opts.itemClass).first(); - // const height = parseInt(o.attr('data-gs-height')); - // const verticalMargin = this.opts.verticalMargin as number; - // return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height); - - let el = this.el.querySelector(`.${this.opts.itemClass}`) as HTMLElement; - let height = Utils.toNumber(el.getAttribute('data-gs-height')); - let verticalMargin = this.opts.verticalMargin as number; + const el = this.el.querySelector('.' + this.opts.itemClass) as HTMLElement; + const height = Utils.toNumber(el.getAttribute('data-gs-height')); + const verticalMargin = this.opts.verticalMargin as number; return Math.round((el.offsetHeight - (height - 1) * verticalMargin) / height); } @@ -445,7 +426,7 @@ export class GridStack { */ public cellWidth(): number { // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) - return Math.round(this.$el.outerWidth() / this.opts.column); + return Math.round(this.el.offsetWidth / this.opts.column); } /** @@ -484,8 +465,8 @@ export class GridStack { delete this._prevColumn; } - this.$el.removeClass('grid-stack-' + oldColumn); - this.$el.addClass('grid-stack-' + column); + this.el.classList.remove('grid-stack-' + oldColumn); + this.el.classList.add('grid-stack-' + column); this.opts.column = this.engine.column = column; if (doNotPropagate === true) { return; } @@ -524,7 +505,7 @@ export class GridStack { this.removeAll(false); delete this.el.gridstack; } else { - this.$el.remove(); + this.el.parentNode.removeChild(this.el); } Utils.removeStylesheet(this._stylesId); if (this.engine) { @@ -541,7 +522,7 @@ export class GridStack { public disable(): void { this.enableMove(false); this.enableResize(false); - this.$el.trigger('disable'); + this._triggerEvent('disable'); } /** @@ -553,7 +534,7 @@ export class GridStack { public enable(): void { this.enableMove(true); this.enableResize(true); - this.$el.trigger('enable'); + this._triggerEvent('enable'); } /** @@ -619,7 +600,7 @@ export class GridStack { const relativeTop = position.top - containerPos.top; const columnWidth = Math.floor(this.$el.width() / this.opts.column); - const rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row'))); + const rowHeight = Math.floor(this.$el.height() / parseInt(this.el.getAttribute('data-gs-current-row'))); return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; } @@ -661,19 +642,18 @@ export class GridStack { /** * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets. - * If you want gridstack to add the elements for you, use addWidget instead. + * If you want gridstack to add the elements for you, use `addWidget()` instead. * Makes the given element a widget and returns it. * @param el widget to convert. * * @example * const grid = GridStack.init(); - * grid.el.appendChild('
    ') + * grid.el.appendChild('
    '); * grid.makeWidget('gsi-1'); */ public makeWidget(el: GridStackElement): HTMLElement { if (typeof el === 'string') { - el = document.querySelector(`#${el}`) as HTMLElement; + el = document.querySelector('#' + el) as HTMLElement; } this._prepareElement(el, true); @@ -691,12 +671,12 @@ export class GridStack { */ public maxWidth(els: GridStackElement, val: number): GridStack { if (isNaN(val)) return; - $(els).each((index, el) => { + $(els).each((index, el: GridItemHTMLElement) => { const node = el.gridstackNode; if (!node) { return; } node.maxWidth = (val || undefined); if (node.maxWidth) { - el.setAttribute('data-gs-max-width', val); + el.setAttribute('data-gs-max-width', String(val)); } else { el.removeAttribute('data-gs-max-width'); } @@ -711,11 +691,11 @@ export class GridStack { */ public minWidth(els: GridStackElement, val: number): GridStack { if (isNaN(val)) return; - $(els).each((index, el) => { + $(els).each((index, el: GridItemHTMLElement) => { const node = el.gridstackNode; if (!node) { return; } if (node.minWidth) { - el.setAttribute('data-gs-min-width', val); + el.setAttribute('data-gs-min-width', String(val)); } else { el.removeAttribute('data-gs-min-width'); } @@ -730,11 +710,11 @@ export class GridStack { */ public maxHeight(els: GridStackElement, val: number): GridStack { if (isNaN(val)) return; - $(els).each((index, el) => { + $(els).each((index, el: GridItemHTMLElement) => { const node = el.gridstackNode; if (!node) { return; } if (node.maxHeight) { - el.setAttribute('data-gs-max-height', val); + el.setAttribute('data-gs-max-height', String(val)); } else { el.removeAttribute('data-gs-max-height'); } @@ -749,11 +729,11 @@ export class GridStack { */ public minHeight(els: GridStackElement, val: number): GridStack { if (isNaN(val)) return; - $(els).each((index, el) => { + $(els).each((index, el: GridItemHTMLElement) => { const node = el.gridstackNode; if (!node) { return; } if (node.minHeight) { - el.setAttribute('data-gs-min-height', val); + el.setAttribute('data-gs-min-height', String(val)); } else { el.removeAttribute('data-gs-min-height'); } @@ -920,10 +900,8 @@ export class GridStack { */ public setAnimation(doAnimate: boolean): void { if (doAnimate) { - this.$el.addClass('grid-stack-animate'); this.el.classList.add('grid-stack-animate'); } else { - this.$el.removeClass('grid-stack-animate'); this.el.classList.remove('grid-stack-animate'); } } @@ -933,7 +911,7 @@ export class GridStack { * @param staticValue if true the grid become static. */ public setStatic(staticValue: boolean): void { - this.opts.staticGrid = staticValue === true; + this.opts.staticGrid = (staticValue === true); this.enableMove(!staticValue); this.enableResize(!staticValue); this._setStaticClass(); @@ -1129,7 +1107,7 @@ export class GridStack { row = this.opts.minRow; } // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below - const cssMinHeight = parseInt(this.$el.css('min-height')); + const cssMinHeight = parseInt(getComputedStyle(this.el)['min-height']); if (cssMinHeight > 0) { const verticalMargin = this.opts.verticalMargin as number; const minRow = Math.round((cssMinHeight + verticalMargin) / (this.getCellHeight() + verticalMargin)); @@ -1137,46 +1115,43 @@ export class GridStack { row = minRow; } } - this.$el.attr('data-gs-current-row', row); + this.el.setAttribute('data-gs-current-row', String(row)); if (!this.opts.cellHeight) { return ; } if (!this.opts.verticalMargin) { - this.$el.css('height', (row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit); + this.el.style['height'] = (row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit; } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - this.$el.css('height', (row * ((this.opts.cellHeight as number) + (this.opts.verticalMargin as number)) - - (this.opts.verticalMargin as number)) + this.opts.cellHeightUnit); + this.el.style['height'] = (row * ((this.opts.cellHeight as number) + (this.opts.verticalMargin as number)) - + (this.opts.verticalMargin as number)) + this.opts.cellHeightUnit; } else { - this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit) + - ' + ' + ((row * ((this.opts.verticalMargin as number) - 1)) + this.opts.verticalMarginUnit) + ')'); + this.el.style['height'] = 'calc(' + ((row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit) + + ' + ' + ((row * ((this.opts.verticalMargin as number) - 1)) + this.opts.verticalMarginUnit) + ')'; } } - private _setupRemovingTimeout(el) { - const node = $(el).get(0).gridstackNode; + private _setupRemovingTimeout(el: GridItemHTMLElement) { + const node = el.gridstackNode; if (node._removeTimeout || !this.opts.removable) { return; } node._removeTimeout = setTimeout(() => { - el.addClass('grid-stack-item-removing'); + el.classList.add('grid-stack-item-removing'); node._isAboutToRemove = true; }, this.opts.removeTimeout); } - private _clearRemovingTimeout(el) { - const node = $(el).get(0).gridstackNode; - - if (!node._removeTimeout) { - return; - } + private _clearRemovingTimeout(el: GridItemHTMLElement) { + const node = el.gridstackNode; + if (!node._removeTimeout) { return; } clearTimeout(node._removeTimeout); node._removeTimeout = null; - el.removeClass('grid-stack-item-removing'); + el.classList.remove('grid-stack-item-removing'); node._isAboutToRemove = false; } /** * prepares the element for drag&drop **/ - private _prepareElementsByNode(el, node) { + private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode) { // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth; let cellFullHeight; // internal cellHeight + v-margin @@ -1184,25 +1159,15 @@ export class GridStack { /** called when item starts moving/resizing */ const onStartMoving = function(event, ui) { - self.$el.append(self.$placeholder); self.el.append(self.placeholder); self.engine.cleanNodes(); self.engine.beginUpdate(node); cellWidth = self.cellWidth(); const strictCellHeight = self.getCellHeight(); // heigh without v-margin // compute height with v-margin (Note: we add 1 margin as last row is missing it) - cellFullHeight = (self.$el.height() + self.getVerticalMargin()) / parseInt(self.$el.attr('data-gs-current-row')); + cellFullHeight = (self.$el.height() + self.getVerticalMargin()) / parseInt(self.el.getAttribute('data-gs-current-row')); let { target } = event; - // const o = $(this); - - - self.$placeholder - .attr('data-gs-x', target.getAttribute('data-gs-x')) - .attr('data-gs-y', target.getAttribute('data-gs-y')) - .attr('data-gs-width', target.getAttribute('data-gs-width')) - .attr('data-gs-height', target.getAttribute('data-gs-height')) - .show(); self.placeholder.setAttribute('data-gs-x', target.getAttribute('data-gs-x')); self.placeholder.setAttribute('data-gs-y', target.getAttribute('data-gs-y')); @@ -1210,8 +1175,7 @@ export class GridStack { self.placeholder.setAttribute('data-gs-height', target.getAttribute('data-gs-height')); self.placeholder.style.display = ''; - node.el = self.$placeholder.get(0); - // node.el = self.placeholder; + node.el = self.placeholder; node._beforeDragX = node.x; node._beforeDragY = node.y; node._prevYPix = ui.position.top; @@ -1223,14 +1187,12 @@ export class GridStack { self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin); if (event.type === 'resizestart') { - let itemElement = target.querySelector('.grid-stack-item'); + const itemElement = target.querySelector('.grid-stack-item') as HTMLElement; if (itemElement) { - let ev = document.createEvent('HTMLEvents'); + const ev = document.createEvent('HTMLEvents'); ev.initEvent('resizestart', true, false); - target.querySelector('.grid-stack-item').dispatchEvent(event); + itemElement.dispatchEvent(event); } - - // o.find('.grid-stack-item').trigger('resizestart'); } } @@ -1255,8 +1217,8 @@ export class GridStack { x = node._beforeDragX; y = node._beforeDragY; - self.$placeholder.detach(); - self.$placeholder.hide(); + $(self.placeholder).detach(); + self.placeholder.style.display = 'none'; self.engine.removeNode(node); self._updateContainerHeight(); @@ -1269,14 +1231,10 @@ export class GridStack { if (node._temporaryRemoved) { self.engine.addNode(node); - self.$placeholder - .attr('data-gs-x', x) - .attr('data-gs-y', y) - .attr('data-gs-width', width) - .attr('data-gs-height', height) - .show(); - self.$el.append(self.$placeholder); - node.el = self.$placeholder.get(0); + this._writeAttrs(self.placeholder, x, y, width, height); + self.placeholder.style.display = ''; + self.el.appendChild(self.placeholder); + node.el = self.placeholder; node._temporaryRemoved = false; } } @@ -1308,15 +1266,12 @@ export class GridStack { /** called when the item stops moving/resizing */ const onEndMoving = function(event): void { let { target } = event; - // const o = $(this); - if (!target.gridstackNode) { - return; - } + if (!target.gridstackNode) { return; } // const forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? - self.$placeholder.detach(); - node.el = target; // o.get(0); - self.$placeholder.hide(); + $(self.placeholder).detach(); + node.el = target; + self.placeholder.style.display = 'none'; if (node._isAboutToRemove) { // forceNotify = true; @@ -1328,28 +1283,10 @@ export class GridStack { self._clearRemovingTimeout(el); if (!node._temporaryRemoved) { Utils.removePositioningStyles(target); - target.setAttribute('data-gs-x', node.x); - target.setAttribute('data-gs-y', node.y); - target.setAttribute('data-gs-width', node.width); - target.setAttribute('data-gs-height', node.height); - // o - // .attr('data-gs-x', node.x) - // .attr('data-gs-y', node.y) - // .attr('data-gs-width', node.width) - // .attr('data-gs-height', node.height); + this._writeAttrs(target, node.x, node.y, node.width, node.height); } else { - // Utils.removePositioningStyles(o); - // o - // .attr('data-gs-x', node._beforeDragX) - // .attr('data-gs-y', node._beforeDragY) - // .attr('data-gs-width', node.width) - // .attr('data-gs-height', node.height); Utils.removePositioningStyles(target); - target.setAttribute('data-gs-x', node._beforeDragX); - target.setAttribute('data-gs-y', node._beforeDragY); - target.setAttribute('data-gs-width', node.width); - target.setAttribute('data-gs-height', node.height); - + this._writeAttrs(target, node._beforeDragX, node._beforeDragY, node.width, node.height); node.x = node._beforeDragX; node.y = node._beforeDragY; node._temporaryRemoved = false; @@ -1362,24 +1299,19 @@ export class GridStack { self.engine.endUpdate(); - // const nestedGrids = o.find('.grid-stack'); let nestedGrids = target.querySelectorAll('.grid-stack'); if (nestedGrids.length && event.type === 'resizestop') { - nestedGrids.each((index, el) => { + nestedGrids.each((index, el: GridHTMLElement) => { el.gridstack.onResizeHandler(); }); self._triggerNativeEvent(target, '.grid-stack-item', 'resizestop'); self._triggerNativeEvent(target, '.grid-stack-item', 'gsresizestop'); - - // o.find('.grid-stack-item').trigger('resizestop'); - // o.find('.grid-stack-item').trigger('gsresizestop'); } if (event.type === 'resizestop') { + // self.$el.trigger('gsresizestop', o); TODO: missing target ? self._triggerNativeEvent(self.el, null, 'gsresizestop'); - - // self.$el.trigger('gsresizestop', o); } } @@ -1417,35 +1349,38 @@ export class GridStack { } private _prepareElement(el: GridItemHTMLElement, triggerAddEvent?: boolean): void { - triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false; - // el = $(el); + triggerAddEvent = (triggerAddEvent !== undefined ? triggerAddEvent : false); el.classList.add(this.opts.itemClass); - // TODO: What was being passed in as widget here? - // let node = this._readAttr(el, { el, _grid: this }); - let node = this._readAttr(el, { }); + let node = this._readAttr(el, { el: el, _grid: this }); node = this.engine.addNode(node, triggerAddEvent); el.gridstackNode = node; this._prepareElementsByNode(el, node); } + /** call to write x,y,w,h attributes back to element */ + private _writeAttrs(el: HTMLElement, x?: number, y?: number, width?: number, height?: number): void { + if (x !== undefined) { el.setAttribute('data-gs-x', String(x)); } + if (y !== undefined) { el.setAttribute('data-gs-y', String(y)); } + if (width !== undefined) { el.setAttribute('data-gs-width', String(width)); } + if (height !== undefined) { el.setAttribute('data-gs-height', String(height)); } + } + /** call to write any default attributes back to element */ - private _writeAttr(el: HTMLElement, node: GridstackWidget = { }): void { - if (node.x !== undefined) { el.setAttribute('data-gs-x', `${node.x}`); } - if (node.y !== undefined) { el.setAttribute('data-gs-y', `${node.y}`); } - if (node.width !== undefined) { el.setAttribute('data-gs-width', `${node.width}`); } - if (node.height !== undefined) { el.setAttribute('data-gs-height', `${node.height}`); } + private _writeAttr(el: HTMLElement, node: GridstackWidget = {}): void { + this._writeAttrs(el, node.x, node.y, node.width, node.height); + if (node.autoPosition) { el.setAttribute('data-gs-auto-position', 'true'); } else { el.removeAttribute('data-gs-auto-position'); } - if (node.minWidth !== undefined) { el.setAttribute('data-gs-min-width', `${node.minWidth}`); } - if (node.maxWidth !== undefined) { el.setAttribute('data-gs-max-width', `${node.maxWidth}`); } - if (node.minHeight !== undefined) { el.setAttribute('data-gs-min-height', `${node.minHeight}`); } - if (node.maxHeight !== undefined) { el.setAttribute('data-gs-max-height', `${node.maxHeight}`); } + if (node.minWidth !== undefined) { el.setAttribute('data-gs-min-width', String(node.minWidth)); } + if (node.maxWidth !== undefined) { el.setAttribute('data-gs-max-width', String(node.maxWidth)); } + if (node.minHeight !== undefined) { el.setAttribute('data-gs-min-height', String(node.minHeight)); } + if (node.maxHeight !== undefined) { el.setAttribute('data-gs-max-height', String(node.maxHeight)); } if (node.noResize) { el.setAttribute('data-gs-no-resize', 'true'); } else { @@ -1465,11 +1400,11 @@ export class GridStack { } if (node.resizeHandles !== undefined) { el.setAttribute('data-gs-resize-handles', node.resizeHandles); } - if (node.id !== undefined) { el.setAttribute('data-gs-id', `${node.id}`); } + if (node.id !== undefined) { el.setAttribute('data-gs-id', String(node.id)); } } /** call to write any default attributes back to element */ - private _readAttr(el: HTMLElement, node: GridstackWidget = { }): GridstackWidget { + private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridstackWidget { node.x = Utils.toNumber(el.getAttribute('data-gs-x')); node.y = Utils.toNumber(el.getAttribute('data-gs-y')); node.width = Utils.toNumber(el.getAttribute('data-gs-width')); @@ -1488,8 +1423,14 @@ export class GridStack { return node; } - private _updateElement(el, callback): void { - el = $(el).first(); + private _updateElement(_el: GridStackElement, callback: (el:GridItemHTMLElement, node: GridStackNode) => void): void { + let el: GridItemHTMLElement; + if (typeof _el === 'string') { + el = document.querySelector('#'+_el) as GridItemHTMLElement; + } else { + el = _el; + } + if (!el) { return; } const node = el.gridstackNode; if (!node) { return; } @@ -1508,9 +1449,9 @@ export class GridStack { const staticClassName = 'grid-stack-static'; if (this.opts.staticGrid === true) { - this.$el.addClass(staticClassName); + this.el.classList.add(staticClassName); } else { - this.$el.removeClass(staticClassName); + this.el.classList.remove(staticClassName); } } @@ -1518,7 +1459,7 @@ export class GridStack { * called when we are being resized - check if the one Column Mode needs to be turned on/off * and remember the prev columns we used. */ - private onResizeHandler() { + public onResizeHandler() { if (this.isAutoCellHeight) { Utils.throttle(() => { this.cellHeight(this.cellWidth(), false)}, 100); } @@ -1537,24 +1478,24 @@ export class GridStack { } } - /** called to add drag over support to support widgets*/ + /** called to add drag over support to support widgets */ private setupAcceptWidget() { if (this.opts.staticGrid || !this.opts.acceptWidgets) return; // vars used by the function callback - let draggingElement = null; + let draggingElement: GridItemHTMLElement; const self = this; const onDrag = function(event, ui) { const el = draggingElement; - const node = el.get(0).gridstackNode; + const node = el.gridstackNode; const pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); const x = Math.max(0, pos.x); const y = Math.max(0, pos.y); if (!node._added) { node._added = true; - node.el = el.get(0); + node.el = el; node.autoPosition = true; node.x = x; node.y = y; @@ -1562,14 +1503,10 @@ export class GridStack { this.engine.beginUpdate(node); this.engine.addNode(node); - this.$el.append(self.$placeholder); - self.$placeholder - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .show(); - node.el = self.$placeholder.get(0); + this.el.appendChild(self.placeholder); + self._writeAttrs(self.placeholder, node.x, node.y, node.width, node.height); + self.placeholder.style.display = ''; + node.el = self.placeholder; node._beforeDragX = node.x; node._beforeDragY = node.y; @@ -1584,25 +1521,28 @@ export class GridStack { this.dd .droppable(this.el, { - accept: el => { - el = $(el); - const node = el.get(0).gridstackNode; + accept: (el: GridItemHTMLElement) => { + const node: GridStackNode = el.gridstackNode; if (node && node._grid === this) { return false; } - return el.is(this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets); + if (typeof this.opts.acceptWidgets === 'function') { + return this.opts.acceptWidgets(el); + } + const selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string); + return el.matches(selector); } }) .on(this.el, 'dropover', (event, ui) => { - const el = $(ui.draggable); + const el: GridItemHTMLElement = ui.draggable; let width, height; // see if we already have a node with widget/height and check for attributes - let origNode = el.get(0).gridstackNode; + let origNode: GridStackNode = el.gridstackNode; if (!origNode || !origNode.width || !origNode.height) { - const w = parseInt(el.attr('data-gs-width')); + const w = parseInt(el.getAttribute('data-gs-width')); if (w > 0) { origNode = origNode || {}; origNode.width = w; } - const h = parseInt(el.attr('data-gs-height')); + const h = parseInt(el.getAttribute('data-gs-height')); if (h > 0) { origNode = origNode || {}; origNode.height = h; } } @@ -1611,37 +1551,37 @@ export class GridStack { const cellWidth = this.cellWidth(); const cellHeight = this.getCellHeight(); const verticalMargin = this.opts.verticalMargin as number; - width = origNode && origNode.width ? origNode.width : Math.ceil(el.outerWidth() / cellWidth); - height = origNode && origNode.height ? origNode.height : Math.round((el.outerHeight() + verticalMargin) / (cellHeight + verticalMargin)); + width = origNode && origNode.width ? origNode.width : Math.ceil(el.offsetWidth / cellWidth); + height = origNode && origNode.height ? origNode.height : Math.round((el.offsetHeight + verticalMargin) / (cellHeight + verticalMargin)); draggingElement = el; const node = this.engine._prepareNode({width: width, height: height, _added: false, _temporary: true}); node._isOutOfGrid = true; - el.get(0).gridstackNode = node; - el.get(0)._gridstackNodeOrig = origNode; + el.gridstackNode = node; + el._gridstackNodeOrig = origNode; - el.on('drag', onDrag); + $(el).on('drag', onDrag); return false; // prevent parent from receiving msg (which may be grid as well) }) .on(this.el, 'dropout', (event, ui) => { // jquery-ui bug. Must verify widget is being dropped out // check node variable that gets set when widget is out of grid - const el = $(ui.draggable); - const node = el.get(0).gridstackNode; + const el: GridItemHTMLElement = ui.draggable; + const node = el.gridstackNode; if (!node || !node._isOutOfGrid) { return; } - el.unbind('drag', onDrag); + $(el).unbind('drag', onDrag); node.el = null; this.engine.removeNode(node); - this.$placeholder.detach(); + $(this.placeholder).detach(); this._updateContainerHeight(); - el.get(0).gridstackNode = el.get(0)._gridstackNodeOrig; + el.gridstackNode = el._gridstackNodeOrig; return false; // prevent parent from receiving msg (which may be grid as well) }) .on(this.el, 'drop', (event, ui) => { - this.$placeholder.detach(); + $(this.placeholder).detach(); const node = $(ui.draggable).get(0).gridstackNode; delete node._isOutOfGrid; @@ -1654,7 +1594,7 @@ export class GridStack { } $(ui.helper).remove(); node.el = el.get(0); - this.$placeholder.hide(); + this.placeholder.style.display = 'none'; Utils.removePositioningStyles(el); el.find('div.ui-resizable-handle').remove(); diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts index 58eeb236c..cec84263a 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -10,7 +10,7 @@ import { GridStack } from './gridstack'; import { GridStackDragDropPlugin, DDOpts, DDKey } from './gridstack-dragdrop-plugin'; import { GridStackElement } from './types'; -// TODO: TEMPORARY until can remove jquery-ui drag&drop and this class! +// TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! // see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs import * as $ from './jquery.js'; import './jquery-ui.js'; @@ -38,7 +38,7 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { }}); } return this; - }; + } public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { const $el = $(el); @@ -54,23 +54,23 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { }}); } return this; - }; + } public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { const $el = $(el); $el.droppable(opts); return this; - }; + } public isDroppable(el: GridStackElement): boolean { const $el = $(el); return Boolean($el.data('droppable')); - }; + } public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin { $(el).on(eventName, callback); return this; - }; + } } // finally register ourself diff --git a/src/types.ts b/src/types.ts index cb5081db8..3c649535c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,6 +6,8 @@ * gridstack.js may be freely distributed under the MIT license. */ +import { GridStack } from './gridstack'; + export type numberOrString = number | string; export type GridStackElement = string | HTMLElement | GridItemHTMLElement; export interface GridItemHTMLElement extends HTMLElement { @@ -24,7 +26,7 @@ export interface GridstackOptions { * string for explicit class name, * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html) */ - acceptWidgets?: boolean | string | ((i: number, element: Element) => boolean); + acceptWidgets?: boolean | string | ((element: Element) => boolean); /** if true the resizing handles are shown even if the user is not hovering over the widget (default?: false) */ alwaysShowResizeHandle?: boolean; @@ -195,6 +197,7 @@ export interface GridStackNode extends GridstackWidget { el?: GridItemHTMLElement; /** @internal need to do that for each and use --stripInternal */ _id?: number; + _grid?: GridStack; _dirty?: boolean; _updating?: boolean; _added?: boolean; @@ -209,4 +212,10 @@ export interface GridStackNode extends GridstackWidget { _lastTriedY?: number; _lastTriedWidth?: number; _lastTriedHeight?: number; + _isAboutToRemove?: boolean; + _removeTimeout?: number; + _beforeDragX?: number; + _beforeDragY?: number; + _prevYPix?: number; + _temporaryRemoved?: boolean; } From 5a72b709b0403b28adcb0c6e5ba1735b2d6c5bea Mon Sep 17 00:00:00 2001 From: Bj Date: Tue, 10 Mar 2020 20:27:33 -0400 Subject: [PATCH 0176/1298] Fix lint command on Windows --- .eslintrc.js | 3 +-- package.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 76b691f34..e62997fcf 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -16,7 +16,6 @@ module.exports = { rules: { 'indent': ['error', 2], 'max-len': ['error', 180], - 'no-trailing-spaces': 'error', - 'prefer-const': 0 + 'no-trailing-spaces': 'error' } }; diff --git a/package.json b/package.json index 18281783e..eb214ae3c 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "web": "rm -rf dist/* && webpack", "test": "yarn lint && karma start karma.conf.js", - "lint": "tsc --noEmit && eslint 'src/**/*.ts'", + "lint": "tsc --noEmit && eslint src/*.ts", "reset": "rm -rf dist node_modules", "prepublishOnly": "yarn build" }, From 7169f3bc6f2cc9d28215831e77b087164ff71b4d Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 11 Mar 2020 08:12:11 -0700 Subject: [PATCH 0177/1298] readme typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a8df5ad0e..b9b9101e2 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` From 4e5dddcbecc2cd8829da3f1b26a7f39d5496461a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 11 Mar 2020 16:09:54 -0700 Subject: [PATCH 0178/1298] destroy drag&drop when removing node(s) * calling `grid.destroy(false)` will clean things and let you init() again. * removing an item will now nuke jquery drag&drop using `draggable('destroy')` instead of just disabling. This also removes all JQ styles added if you keep DOM element around. * also removes extra grid style left behind * fix for #1204 --- demo/float.html | 7 ++++++- doc/CHANGES.md | 1 + src/gridstack.jQueryUI.js | 4 ++-- src/gridstack.js | 20 ++++++++++++-------- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/demo/float.html b/demo/float.html index dbc66085b..8e20ed50a 100644 --- a/demo/float.html +++ b/demo/float.html @@ -24,10 +24,15 @@

    Float grid demo

    - - - - - +
    @@ -30,6 +23,12 @@

    Float grid demo

    - - - - - +
    diff --git a/demo/nested.html b/demo/nested.html index 17203189b..116f88485 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -7,12 +7,7 @@ Nested grids demo - - - - - - + - - - - - +
    diff --git a/demo/serialization.html b/demo/serialization.html index f5f11031a..5fa56121f 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -7,11 +7,7 @@ Serialization demo - - - - - +
    diff --git a/demo/two.html b/demo/two.html index da0c540dc..8c58335ff 100644 --- a/demo/two.html +++ b/demo/two.html @@ -9,11 +9,7 @@ - - - - - + + + +
    +

    Locked demo

    + +

    +
    +
    + + + + diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 994b374c1..9c6619e1a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -36,6 +36,8 @@ Change log - fix [1187](https://github.com/gridstack/gridstack.js/issues/1187) IE support for `CustomEvent` polyfill - thanks [@phil-blais](https://github.com/phil-blais) - fix [1204](https://github.com/gridstack/gridstack.js/issues/1204) destroy drag&drop when removing node(s) instead of just disabling it. +- fix [1181](https://github.com/gridstack/gridstack.js/issues/1181) Locked widgets are still moveable by other widgets. +- fix [1217](https://github.com/gridstack/gridstack.js/issues/1217) If I set cellHeight to some vh, only first grid will take vh, rest will use px - include SASS source files to npm package again [1193](https://github.com/gridstack/gridstack.js/pull/1193) ## 1.1.0 (2020-02-29) diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index 25c598d86..7ce95a251 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -1,21 +1,18 @@ describe('gridstack engine', function() { 'use strict'; - - var e; - var w; + let engine; + let findNode = function(engine, id) { + return engine.nodes.find(function(i) { return i._id === id; }); + }; beforeEach(function() { - w = window; - e = GridStack.Engine; }); describe('test constructor', function() { - var engine; - + beforeAll(function() { engine = new GridStack.Engine(12); }); - it('should be setup properly', function() { expect(engine.column).toEqual(12); expect(engine.float).toEqual(false); @@ -25,12 +22,10 @@ describe('gridstack engine', function() { }); describe('test _prepareNode', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12); }); - it('should prepare a node', function() { expect(engine._prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); expect(engine._prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, width: 1, height: 1})); @@ -50,7 +45,6 @@ describe('gridstack engine', function() { }); describe('test isAreaEmpty', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -71,7 +65,6 @@ describe('gridstack engine', function() { }); describe('test cleanNodes/getDirtyNodes', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -87,8 +80,7 @@ describe('gridstack engine', function() { }); it('should return all dirty nodes', function() { - var nodes = engine.getDirtyNodes(); - + let nodes = engine.getDirtyNodes(); expect(nodes.length).toEqual(2); expect(nodes[0].idx).toEqual(1); expect(nodes[1].idx).toEqual(2); @@ -97,20 +89,16 @@ describe('gridstack engine', function() { it('should\'n clean nodes if _batchMode true', function() { engine._batchMode = true; engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toBeGreaterThan(0); }); it('should clean all dirty nodes', function() { engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toEqual(0); }); }); describe('test batchUpdate/commit', function() { - var engine; - beforeAll(function() { engine = new GridStack.Engine(12); }); @@ -137,7 +125,6 @@ describe('gridstack engine', function() { }); describe('test batchUpdate/commit', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -155,17 +142,14 @@ describe('gridstack engine', function() { }); describe('test _notify', function() { - var engine; - var spy; + let spy; beforeEach(function() { spy = { callback: function() {} }; spyOn(spy, 'callback'); - engine = new GridStack.Engine(12, spy.callback, true); - engine.nodes = [ engine._prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), engine._prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), @@ -176,13 +160,11 @@ describe('gridstack engine', function() { it('should\'n be called if _batchMode true', function() { engine._batchMode = true; engine._notify(); - expect(spy.callback).not.toHaveBeenCalled(); }); it('should by called with dirty nodes', function() { engine._notify(); - expect(spy.callback).toHaveBeenCalledWith([ engine.nodes[0], engine.nodes[1] @@ -190,10 +172,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed', function() { - var n1 = {idx: -1}; - + let n1 = {idx: -1}; engine._notify(n1); - expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -202,10 +182,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed and should maintain false parameter', function() { - var n1 = {idx: -1}; - + let n1 = {idx: -1}; engine._notify(n1, false); - expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -216,12 +194,6 @@ describe('gridstack engine', function() { describe('test _packNodes', function() { describe('using not float mode', function() { - var engine; - - var findNode = function(engine, id) { - return engine.nodes.find(function(i) { return i._id === id; }); - }; - beforeEach(function() { engine = new GridStack.Engine(12, null, false); }); @@ -230,9 +202,7 @@ describe('gridstack engine', function() { engine.nodes = [ {x: 0, y: 0, width: 1, height: 1, _id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); }); @@ -241,9 +211,7 @@ describe('gridstack engine', function() { engine.nodes = [ {x: 0, y: 1, width: 1, height: 1, _id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); }); @@ -252,33 +220,27 @@ describe('gridstack engine', function() { {x: 0, y: 1, width: 1, height: 1, _id: 1}, {x: 0, y: 5, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); }); - + it('should pack nodes correctly', function() { engine.nodes = [ {x: 0, y: 5, width: 1, height: 1, _id: 1}, {x: 0, y: 1, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); }); - + it('should respect locked nodes', function() { engine.nodes = [ {x: 0, y: 1, width: 1, height: 1, _id: 1, locked: true}, {x: 0, y: 5, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, width: 1, height: 1, _dirty: true})); @@ -287,35 +249,57 @@ describe('gridstack engine', function() { }); describe('test isNodeChangedPosition', function() { - var engine; - beforeAll(function() { engine = new GridStack.Engine(12); }); - it('should return true for changed x', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 2, 2)).toEqual(true); }); - it('should return true for changed y', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 1)).toEqual(true); }); - it('should return true for changed width', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 2, 2, 4, 4)).toEqual(true); }); - it('should return true for changed height', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 3)).toEqual(true); }); - it('should return false for unchanged position', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 4)).toEqual(false); }); }); + + describe('test locked widget', function() { + beforeAll(function() { + engine = new GridStack.Engine(12); + }); + it('should add widgets around locked one', function() { + let nodes = [ + {x: 0, y: 1, width: 12, height: 1, locked: 'yes', noMove: true, noResize: true, _id: 1}, + {x: 1, y: 0, width: 2, height: 3, _id: 2} + ]; + // add locked item + engine.addNode(nodes[0]) + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 12, height: 1, locked: 'yes'})); + engine.addNode(nodes[1]) + // add item that moves past locked one + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 12, height: 1, locked: 'yes'})); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 1, y: 2})); + // prevents moving locked item + let node1 = findNode(engine, 1); + expect(engine.moveNode(node1, 6, 6)).toEqual(null); + // but moves regular one (gravity ON) + let node2 = findNode(engine, 2); + expect(engine.moveNode(node2, 6, 6)).toEqual(jasmine.objectContaining({x: 6, y: 2, width: 2, height: 3,})); + // but moves regular one (gravity OFF) + engine.float = true; + expect(engine.moveNode(node2, 7, 6)).toEqual(jasmine.objectContaining({x: 7, y: 6, width: 2, height: 3,})); + }); + }); + }); diff --git a/src/gridstack.js b/src/gridstack.js index ae580de51..246a6f10f 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -342,8 +342,15 @@ while (true) { var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn}); if (!collisionNode) { return; } - var moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height, - collisionNode.width, collisionNode.height, true); + var moved; + if (collisionNode.locked) { + // if colliding with a locked item, move ourself instead + moved = this.moveNode(node, node.x, collisionNode.y + collisionNode.height, + node.width, node.height, true); + } else { + moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height, + collisionNode.width, collisionNode.height, true); + } if (!moved) { return; } // break inf loop if we couldn't move after all (ex: maxRow, fixed) } }; @@ -635,6 +642,7 @@ }; GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) { + if (node.locked) { return null; } if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof width !== 'number') { width = node.width; } From 4cf156b0e3ed1b18b91862b39796ca8b70e46c42 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 16 Mar 2020 10:13:59 -0700 Subject: [PATCH 0187/1298] fix typo * which I found while working on typescript branch (wish we would switch sooner and avoid errors like these and many) --- src/gridstack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gridstack.js b/src/gridstack.js index 246a6f10f..4da2cf574 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -651,7 +651,7 @@ // constrain the passed in values and check if we're still changing our node var resizing = (node.width !== width || node.height !== height); var nn = { x: x, y: y, width: width, height: height, - maxWidth: node.maxWidth, maxHeight: NodeIterator.maxHeight, minWidth: node.minWidth, minHeight: node.minHeight}; + maxWidth: node.maxWidth, maxHeight: node.maxHeight, minWidth: node.minWidth, minHeight: node.minHeight}; nn = this._prepareNode(nn, resizing); if (node.x === nn.x && node.y === nn.y && node.width === nn.width && node.height === nn.height) { return null; From e29caf6401c2ac56ea477c048a140297bc8c5471 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 16 Mar 2020 13:19:53 -0700 Subject: [PATCH 0188/1298] TS: update to latest develop branch * copied over the latest bug fixes from develop. apparently I had missed some (row feature, etc..) * `addWidget(el, x, y, width, ...)` now obsolete but sitll supported warning * started 2.x readme section more #1084 --- README.md | 15 ++++++++ demo/anijs.html | 2 +- demo/float.html | 4 +-- demo/two.html | 4 +-- doc/CHANGES.md | 1 + doc/README.md | 25 ++++--------- spec/gridstack-spec.js | 25 ++++++------- spec/gridstack-tests.ts | 24 ------------- src/gridstack-engine.ts | 78 +++++++++++++++++++++-------------------- src/gridstack.ts | 75 ++++++++++++++++----------------------- src/types.ts | 2 +- 11 files changed, 111 insertions(+), 144 deletions(-) delete mode 100644 spec/gridstack-tests.ts diff --git a/README.md b/README.md index b9b9101e2..24633d688 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Join us on Slack: https://gridstackjs.troolee.com - [Touch devices support](#touch-devices-support) - [Migrating to v0.6.x](#migrating-to-v06x) - [Migrating to v1.0.0](#migrating-to-v100) + - [Migrating to v2.0.0](#migrating-to-v200) - [Changes](#changes) - [The Team](#the-team) @@ -323,6 +324,20 @@ Recommend looking at the [many samples](./demo) for more code examples. We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.4.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring it's own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` + after you import your libs. +## Migrating to v2.0.0 + +make sure to read v1.0.0 migration first! + +v2.x is a Typescript rewrite of 1.x, using classes and overall code cleanup. You code might not need change from 1.x + +In general methods that used optional args as getting vs setting are not used in Typescript. +Also legacy methods that used to take tons of parameters will now take an object. + +``` +removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {x, y, with,...})` +`float()` to get value --> `getFloat()` +``` + Changes ===== diff --git a/demo/anijs.html b/demo/anijs.html index a4def831d..6acecfbe4 100644 --- a/demo/anijs.html +++ b/demo/anijs.html @@ -38,7 +38,7 @@

    Widget added

    }); function addWidget() { - grid.addWidget('
    ', 0, 0, Math.floor(1 + 3 * Math.random()), Math.floor(1 + 3 * Math.random()), true); + grid.addWidget('
    ', {width: Math.floor(1 + 3 * Math.random()), height: Math.floor(1 + 3 * Math.random())}); }; var animationHelper = AniJS.getHelper(); diff --git a/demo/float.html b/demo/float.html index d1509e3af..edf7c094e 100644 --- a/demo/float.html +++ b/demo/float.html @@ -50,8 +50,8 @@

    Float grid demo

    }; toggleFloat = function() { - grid.float(! grid.float()); - document.querySelector('#float').innerHTML = 'float: ' + grid.float(); + grid.float(! grid.getFloat()); + document.querySelector('#float').innerHTML = 'float: ' + grid.getFloat(); }; addNewWidget(); diff --git a/demo/two.html b/demo/two.html index 8c58335ff..9967f10d9 100644 --- a/demo/two.html +++ b/demo/two.html @@ -135,8 +135,8 @@

    Two grids demo

    }); function toggleFloat(button, i) { - grids[i].float(! grids[i].float()); - button.innerHTML = 'float: ' + grids[i].float(); + grids[i].float(! grids[i].getFloat()); + button.innerHTML = 'float: ' + grids[i].getFloat(); } function compact(i) { diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 698778586..bacab24d5 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -37,6 +37,7 @@ Change log - fix [1187](https://github.com/gridstack/gridstack.js/issues/1187) IE support for `CustomEvent` polyfill - thanks [@phil-blais](https://github.com/phil-blais) - fix [1204](https://github.com/gridstack/gridstack.js/issues/1204) destroy drag&drop when removing node(s) instead of just disabling it. - include SASS source files to npm package again [1193](https://github.com/gridstack/gridstack.js/pull/1193) - include SASS source files to npm package again [1193](https://github.com/gridstack/gridstack.js/pull/1193) +- fix [1217](https://github.com/gridstack/gridstack.js/issues/1217) If I set `cellHeight` to some `vh`, only first grid will take `vh`, rest will use `px` - add `getGridItems()` to return list of HTML grid items ## 1.1.0 (2020-02-29) diff --git a/doc/README.md b/doc/README.md index 3d78dbe30..dddaa1b60 100644 --- a/doc/README.md +++ b/doc/README.md @@ -22,7 +22,6 @@ gridstack.js API - [gsresizestop(event, ui)](#gsresizestopevent-ui) - [API](#api) - [addWidget(el, [options])](#addwidgetel-options) - - [addWidget(el, [x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id])](#addwidgetel-x-y-width-height-autoposition-minwidth-maxwidth-minheight-maxheight-id) - [batchUpdate()](#batchupdate) - [compact()](#compact) - [cellHeight()](#cellheight) @@ -239,30 +238,19 @@ grid.on('gsresizestop', function(event, element) { ### addWidget(el, [options]) -Creates new widget and returns it. Options is an object containing the fields x,y,width,height,etc... described below. - -### addWidget(el, [x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id]) - -Creates new widget and returns it. +Creates new widget and returns it. Options is an object containing the fields x,y,width,height,etc... Parameters: -- `el` - widget to add -- `x`, `y`, `width`, `height` - widget position/dimensions (optional) -- `autoPosition` - if `true` then `x`, `y` parameters will be ignored and widget will be places on the first available -position (optional) -- `minWidth` minimum width allowed during resize/creation (optional) -- `maxWidth` maximum width allowed during resize/creation (optional) -- `minHeight` minimum height allowed during resize/creation (optional) -- `maxHeight` maximum height allowed during resize/creation (optional) -- `id` value for `data-gs-id` (optional) +- `el` - html element or string definition to add +- `options` widget position/size options (optional) - see GridStackWidget Widget will be always placed even if result height is more than actual grid height. You need to use `willItFit` method before calling `addWidget` for additional check. ```js var grid = GridStack.init(); -grid.addWidget(el, 0, 0, 3, 2, true); +grid.addWidget('
    hello
    ', {width: 3}); ``` ### batchUpdate() @@ -507,15 +495,14 @@ Returns `true` if the `height` of the grid will be less the vertical constraint. have `height` constraint. ```js -if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) { - grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); +if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, newNode.autoPosition)) { + grid.addWidget(newNode.el, newNode); } else { alert('Not enough free space to place the widget'); } ``` - ## Utils ### GridStack.Utils.sort(nodes[, dir[, width]]) diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index ffd7e5169..2473600d4 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -753,7 +753,8 @@ describe('gridstack', function() { }); it('should keep all widget options the same (autoPosition off', function() { var grid = GridStack.init({float: true});; - var widget = grid.addWidget(widgetHTML, 6, 7, 2, 3, false, 1, 4, 2, 5, 'coolWidget'); + var widget = grid.addWidget(widgetHTML, {x: 6, y:7, width:2, height:3, autoPosition:false, + mindWidth:1, maxWidth:4, mindHeight:2, maxHeight:5, id:'coolWidget'}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(7); @@ -767,9 +768,9 @@ describe('gridstack', function() { expect($widget.attr('data-gs-id')).toBe('coolWidget'); // should move widget to top with float=false - expect(grid.float()).toBe(true); + expect(grid.getFloat()).toBe(true); grid.float(false); - expect(grid.float()).toBe(false); + expect(grid.getFloat()).toBe(false); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); // <--- from 7 to 4 below second original widget expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); @@ -783,7 +784,7 @@ describe('gridstack', function() { // should not move again (no-op) grid.float(true); - expect(grid.float()).toBe(true); + expect(grid.getFloat()).toBe(true); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); @@ -806,7 +807,7 @@ describe('gridstack', function() { }); it('should change x, y coordinates for widgets.', function() { var grid = GridStack.init({float: true}); - var widget = grid.addWidget(widgetHTML, 9, 7, 2, 3, true); + var widget = grid.addWidget(widgetHTML, {x:9, y:7, width:2, height:3, autoPosition:true}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(9); expect(parseInt($widget.attr('data-gs-y'), 10)).not.toBe(7); @@ -925,14 +926,14 @@ describe('gridstack', function() { it('should clear x position', function() { var grid = GridStack.init({float: true}); var widgetHTML = '
    '; - var widget = grid.addWidget(widgetHTML, null, null, undefined); + var widget = grid.addWidget(widgetHTML, {x:null, y:null, width:undefined}); var $widget = $(widget); expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); }); }); - describe('method float()', function() { + describe('method getFloat()', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); @@ -941,15 +942,15 @@ describe('gridstack', function() { }); it('should match true/false only', function() { var grid = GridStack.init({float: true}); - expect(grid.float()).toBe(true); + expect(grid.getFloat()).toBe(true); grid.float(0); - expect(grid.float()).toBe(false); + expect(grid.getFloat()).toBe(false); grid.float(null); - expect(grid.float()).toBe(false); + expect(grid.getFloat()).toBe(false); grid.float(undefined); - expect(grid.float()).toBe(false); + expect(grid.getFloat()).toBe(false); grid.float(false); - expect(grid.float()).toBe(false); + expect(grid.getFloat()).toBe(false); }); }); diff --git a/spec/gridstack-tests.ts b/spec/gridstack-tests.ts deleted file mode 100644 index 94a7e00bb..000000000 --- a/spec/gridstack-tests.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { GridStack, GridstackOptions, MousePosition } from '../src/gridstack'; - -var options: GridstackOptions = { - float: true -}; - -var grid: GridStack = GridStack.init(options); -var gsFromElement: GridStack = GridStack.get(); -var gsFromElement2: GridStack = ($('.grid-stack').get(0) as any).gridstack; - -if (gsFromElement !== grid) throw Error('These should match!'); -if (gsFromElement2 !== grid) throw Error('These should match!'); - -var gridItem = '
    Hello
    ' - -grid.addWidget(gridItem, {width: 2}); -grid.addWidget(gridItem, 1, 2, 3, 4, true); -grid.makeWidget(document.createElement('div')); -grid.batchUpdate(); -grid.cellHeight();; -grid.cellHeight(2); -grid.cellWidth(); -grid.getCellFromPixel({ left:20, top: 20 }); -grid.removeAll(false); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 294e77932..f6a6cf6ae 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -71,8 +71,16 @@ export class GridStackEngine { while (true) { let collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn}); if (!collisionNode) { return; } - this.moveNode(collisionNode, collisionNode.x, node.y + node.height, - collisionNode.width, collisionNode.height, true); + let moved; + if (collisionNode.locked) { + // if colliding with a locked item, move ourself instead + moved = this.moveNode(node, node.x, collisionNode.y + collisionNode.height, + node.width, node.height, true); + } else { + moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height, + collisionNode.width, collisionNode.height, true); + } + if (!moved) { return; } // break inf loop if we couldn't move after all (ex: maxRow, fixed) } } @@ -112,7 +120,7 @@ export class GridStackEngine { } /** float getter method */ - public get float(): boolean { return this._float; } + public get float(): boolean { return this._float || false; } private _sortNodes(dir?: -1 | 1) { this.nodes = Utils.sort(this.nodes, dir, this.column); @@ -180,13 +188,6 @@ export class GridStackEngine { let defaults = {width: 1, height: 1, x: 0, y: 0}; node = Utils.defaults(node, defaults); - // convert any strings over - /* TODO: check - node.x = parseInt(node.x); - node.y = parseInt(node.y); - node.width = parseInt(node.width); - node.height = parseInt(node.height); - */ node.autoPosition = node.autoPosition || false; node.noResize = node.noResize || false; node.noMove = node.noMove || false; @@ -197,19 +198,29 @@ export class GridStackEngine { if (Number.isNaN(node.width)) { node.width = defaults.width; } if (Number.isNaN(node.height)) { node.height = defaults.height; } + if (node.maxWidth) { node.width = Math.min(node.width, node.maxWidth); } + if (node.maxHeight) { node.height = Math.min(node.height, node.maxHeight); } + if (node.minWidth) { node.width = Math.max(node.width, node.minWidth); } + if (node.minHeight) { node.height = Math.max(node.height, node.minHeight); } + if (node.width > this.column) { node.width = this.column; } else if (node.width < 1) { node.width = 1; } - if (node.height < 1) { + if (this.maxRow && node.height > this.maxRow) { + node.height = this.maxRow; + } else if (node.height < 1) { node.height = 1; } if (node.x < 0) { node.x = 0; } + if (node.y < 0) { + node.y = 0; + } if (node.x + node.width > this.column) { if (resizing) { @@ -218,9 +229,12 @@ export class GridStackEngine { node.x = this.column - node.width; } } - - if (node.y < 0) { - node.y = 0; + if (this.maxRow && node.y + node.height > this.maxRow) { + if (resizing) { + node.height = this.maxRow - node.y; + } else { + node.y = this.maxRow - node.height; + } } return node; @@ -263,11 +277,6 @@ export class GridStackEngine { public addNode(node: GridStackNode, triggerAddEvent?: boolean) { node = this.prepareNode(node); - if (node.maxWidth) { node.width = Math.min(node.width, node.maxWidth); } - if (node.maxHeight) { node.height = Math.min(node.height, node.maxHeight); } - if (node.minWidth) { node.width = Math.max(node.width, node.minWidth); } - if (node.minHeight) { node.height = Math.max(node.height, node.minHeight); } - node._id = node._id || GridStackEngine._idSeq++; if (node.autoPosition) { @@ -393,34 +402,27 @@ export class GridStackEngine { } public moveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number, noPack?: boolean): GridStackNode { + if (node.locked) { return null; } if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof width !== 'number') { width = node.width; } if (typeof height !== 'number') { height = node.height; } - if (node.maxWidth) { width = Math.min(width, node.maxWidth); } - if (node.maxHeight) { height = Math.min(height, node.maxHeight); } - if (node.minWidth) { width = Math.max(width, node.minWidth); } - if (node.minHeight) { height = Math.max(height, node.minHeight); } - - if (node.x === x && node.y === y && node.width === width && node.height === height) { - return node; + // constrain the passed in values and check if we're still changing our node + let resizing = (node.width !== width || node.height !== height); + let nn: GridStackNode = { x, y, width, height, + maxWidth: node.maxWidth, maxHeight: node.maxHeight, minWidth: node.minWidth, minHeight: node.minHeight}; + nn = this.prepareNode(nn, resizing); + if (node.x === nn.x && node.y === nn.y && node.width === nn.width && node.height === nn.height) { + return null; } - let resizing = node.width !== width; node._dirty = true; - node.x = x; - node.y = y; - node.width = width; - node.height = height; - - node._lastTriedX = x; - node._lastTriedY = y; - node._lastTriedWidth = width; - node._lastTriedHeight = height; - - node = this.prepareNode(node, resizing); + node.x = node._lastTriedX = nn.x; + node.y = node._lastTriedY = nn.y; + node.width = node._lastTriedWidth = nn.width; + node.height = node._lastTriedHeight = nn.height; this._fixCollisions(node); if (!noPack) { diff --git a/src/gridstack.ts b/src/gridstack.ts index 26ebbceea..891be845e 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -119,7 +119,7 @@ export class GridStack { let grids: GridStack[] = []; getGridElements(selector).forEach(el => { if (!el.gridstack) { - el.gridstack = new GridStack(el, options); + el.gridstack = new GridStack(el, Utils.clone(options)); } grids.push(el.gridstack); }); @@ -336,7 +336,7 @@ export class GridStack { /** - * Creates new widget and returns it. + * add a new widget and returns it. * * Widget will be always placed even if result height is more than actual grid height. * You need to use willItFit method before calling addWidget for additional check. @@ -344,44 +344,19 @@ export class GridStack { * * @example * let grid = GridStack.init(); - * grid.addWidget(el, {width: 3, autoPosition: true}); + * grid.addWidget('
    hello
    ', {width: 3}); * - * @param el widget to add - * @param options widget position/size options (optional) + * @param el html element or string definition to add + * @param options widget position/size options (optional) - see GridStackWidget */ - public addWidget(el: GridStackElement, options? : GridstackWidget): HTMLElement; - - /** - * Creates new widget and returns it. - * Legacy: Spelled out version of the widgets options, recommend use new version instead. - * - * @example - * let grid = GridStack.init(); - * grid.addWidget(el, 0, 0, 3, 2, true); - * - * @param el widget to add - * @param x widget position x (optional) - * @param y widget position y (optional) - * @param width widget dimension width (optional) - * @param height widget dimension height (optional) - * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (optional) - * @param minWidth minimum width allowed during resize/creation (optional) - * @param maxWidth maximum width allowed during resize/creation (optional) - * @param minHeight minimum height allowed during resize/creation (optional) - * @param maxHeight maximum height allowed during resize/creation (optional) - * @param id value for `data-gs-id` (optional) - */ - public addWidget(el: GridStackElement, x? : number | GridstackWidget, y?: number, width?: number, height?: number, autoPosition?: boolean, - minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number, id?: numberOrString): HTMLElement { - // new way of calling with an object - make sure all items have been properly initialized - if (x === undefined || typeof x === 'object') { - // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos - // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node. - // opt = this.engine.prepareNode(opt); - x = (x || {}) as GridstackWidget; - } else { - // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values) - return this.addWidget(el, { x, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id }); + public addWidget(el: GridStackElement, options?: GridstackWidget): GridItemHTMLElement { + + // support legacy call for now ? + if (arguments.length > 2) { + console.warn('gridstack.ts: `addWidget(el, x, y, width...)` is deprecated. Use `addWidget(el, {x, y, width,...})`. It will be removed soon'); + let a = arguments, i = 1, + opt: GridstackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], minWidth:a[i++], maxWidth:a[i++], minHeight:a[i++], maxHeight:a[i++], id:a[i++] }; + return this.addWidget(el, opt); } if (typeof el === 'string') { @@ -390,9 +365,13 @@ export class GridStack { el = doc.body.children[0] as HTMLElement; } - this._writeAttr(el, x); - this.el.appendChild(el); + // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos + // as the actual value are filled in when _prepareElement() calls el.getAttribute('data-gs-xyz) before adding the node. + if (options) { + this._writeAttr(el, options); + } + this.el.appendChild(el); return this.makeWidget(el); } @@ -595,6 +574,11 @@ export class GridStack { * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */ public float(val: boolean) { + if (val === undefined) { + // TODO: should we support and/or change signature ? figure this soon... + console.warn('gridstack.ts: getter `float()` is deprecated in 2.x and has been replaced by `getFloat()`. It will be **completely** removed soon'); + return this.getFloat(); + } this.engine.float = val; this._triggerChangeEvent(); } @@ -603,7 +587,7 @@ export class GridStack { * get the current float mode */ public getFloat(): boolean { - return this.engine.float || false; + return this.engine.float; } /** @@ -672,7 +656,7 @@ export class GridStack { * grid.el.appendChild('
    '); * grid.makeWidget('gsi-1'); */ - public makeWidget(els: GridStackElement): HTMLElement { + public makeWidget(els: GridStackElement): GridItemHTMLElement { let el = getElement(els); this._prepareElement(el, true); this._updateContainerHeight(); @@ -1008,8 +992,8 @@ export class GridStack { * will be places on the first available position * * @example - * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) { - * grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true); + * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, newNode.autoPosition)) { + * grid.addWidget(newNode.el, newNode); * } else { * alert('Not enough free space to place the widget'); * } @@ -1400,7 +1384,8 @@ export class GridStack { } /** call to write any default attributes back to element */ - private _writeAttr(el: HTMLElement, node: GridstackWidget = {}) { + private _writeAttr(el: HTMLElement, node: GridstackWidget) { + if (!node) return; this._writeAttrs(el, node.x, node.y, node.width, node.height); if (node.autoPosition) { diff --git a/src/types.ts b/src/types.ts index 578175d9f..79921ffd2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -203,7 +203,7 @@ export interface DDResizeOpt { /** Drag&Drop remove options */ export interface DDRemoveOpt { - /** class that be removed default?: '.' + opts.itemClass */ + /** class that can be removed (default?: '.' + opts.itemClass) */ accept?: string; } From d1611bb774e0287ce00e42892eb932486c9ed76a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 17 Mar 2020 16:57:01 -0700 Subject: [PATCH 0189/1298] v1.1.1 release --- .npmignore | 1 + Gruntfile.js | 1 - README.md | 21 ++++++++++++--------- doc/CHANGES.md | 9 +++++++-- package.json | 4 ++-- src/gridstack-extra.scss | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- src/gridstack.scss | 2 +- 11 files changed, 28 insertions(+), 20 deletions(-) diff --git a/.npmignore b/.npmignore index e6c85bd11..86389a7f8 100644 --- a/.npmignore +++ b/.npmignore @@ -12,6 +12,7 @@ yarn.lock .npmignore .travis.yml .eslint* +.vscode Gruntfile.js ISSUE_TEMPLATE.md PULL_REQUEST_TEMPLATE.md diff --git a/Gruntfile.js b/Gruntfile.js index cfb546341..a55471521 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -43,7 +43,6 @@ module.exports = function(grunt) { files: { 'dist/gridstack.js': ['src/gridstack.js'], 'dist/gridstack.d.ts': ['src/gridstack.d.ts'], - 'dist/gridstack.all.d.ts': ['src/gridstack.d.ts'], 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'], 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], 'dist/jquery.js': ['src/jquery.js'], diff --git a/README.md b/README.md index b9b9101e2..1da6af786 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,8 @@ npm install --save gridstack * Using CDN (minimized): ```html - - + + ``` if you need to debug, look at the git demo/ examples for non min includes. @@ -162,7 +162,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` @@ -276,15 +276,16 @@ starting in 0.6.x `change` event are no longer sent (for pretty much most nodes! v1.0.0 removed Jquery from the API and external dependencies, which will require some code changes. Here is a list of the changes: -1. your code only needs to include `gridstack.all.js` and `gristack.css` (don't include other JS) and is recommended you do that as internal dependencies will change over time. If you are jquery based, also see note below. +1. see [Migrating to v0.6.x](#migrating-to-v06x) if you didn't already -2. code change: +2. your code only needs to include `gridstack.all.js` and `gristack.css` (don't include other JS) and is recommended you do that as internal dependencies will change over time. If you are jquery based, also see note below. + +3. code change: **OLD** initializing code + adding a widget + adding an event: ```js // initialization returned Jquery element, requiring second call to get GridStack var -$('.grid-stack').gridstack(opts?); -var grid = $('.grid-stack').data('gridstack'); +var grid = $('.grid-stack').gridstack(opts?).data('gridstack'); // returned Jquery element grid.addWidget($('
    test
    '), undefined, undefined, 2, undefined, true); @@ -292,6 +293,8 @@ grid.addWidget($('
    test
    ') // jquery event handler $('.grid-stack').on('added', function(e, items) {/* items contains info */}); +// grid access after init +var grid = $('.grid-stack').data('gridstack'); ``` **NEW** ```js @@ -305,9 +308,9 @@ grid.addWidget('
    test
    ', { // event handler grid.on('added', function(e, items) {/* items contains info */}); +// grid access after init +var grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways... ``` - 3. see [Migrating to v0.6.x](#migrating-to-v06x) if you didn't already - Other vars/global changes ``` `GridStackUI` --> `GridStack` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 9c6619e1a..21e5181c4 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [1.1.0-dev (upcoming)](#110-dev-upcoming) +- [1.1.1-dev (upcoming)](#111-dev-upcoming) +- [1.1.1 (2020-03-17)](#111-2020-03-17) - [1.1.0 (2020-02-29)](#110-2020-02-29) - [v1.0.0 (2020-02-23)](#v100-2020-02-23) - [v0.6.4 (2020-02-17)](#v064-2020-02-17) @@ -32,7 +33,11 @@ Change log -## 1.1.0-dev (upcoming) +## 1.1.1-dev (upcoming) + +- TBD + +## 1.1.1 (2020-03-17) - fix [1187](https://github.com/gridstack/gridstack.js/issues/1187) IE support for `CustomEvent` polyfill - thanks [@phil-blais](https://github.com/phil-blais) - fix [1204](https://github.com/gridstack/gridstack.js/issues/1204) destroy drag&drop when removing node(s) instead of just disabling it. diff --git a/package.json b/package.json index cfadefcc4..bba07e197 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "1.1.0-dev", + "version": "1.1.1-dev", "description": "JavaScript / TypeScript for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "dist/gridstack", "repository": { @@ -8,7 +8,7 @@ "url": "git+https://github.com/gridstack/gridstack.js.git" }, "scripts": { - "build": "grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "build": "rm -rf dist/* && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "test": "grunt lint && karma start karma.conf.js", "lint": "grunt lint", "reset": "rm -rf dist node_modules", diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 5725e4475..72f1ba6a1 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 1.1.0-dev extra CSS for [2-11] columns (non default) + * gridstack 1.1.1-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 5ec62d795..89791a042 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.1.0-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 1.1.1-dev - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 337c8855c..43c4d455a 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 1.1.0-dev +// Type definitions for Gridstack 1.1.1-dev // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index d2aeb60f2..ccbdae9cc 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.1.0-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 1.1.1-dev - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 4da2cf574..69e91fb4a 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 1.1.0-dev + * gridstack.js 1.1.1-dev * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 07be076d0..922f07c1c 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 1.1.0-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 1.1.1-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From b1464fc7194c1214310fa34afeed3f2d5f09960b Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 17 Mar 2020 17:33:15 -0700 Subject: [PATCH 0190/1298] security minimist@1.2.2 --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 479094afe..79db08eab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3231,9 +3231,9 @@ minimist@0.0.8: integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + version "1.2.2" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.2.tgz#b00a00230a1108c48c169e69a291aafda3aacd63" + integrity sha512-rIqbOrKb8GJmx/5bc2M0QchhUouMXSpd1RTclXsB41JdL+VtnojfaJR+h7F9k18/4kHUsBFgk80Uk+q569vjPA== minimist@~0.0.1: version "0.0.10" From e9e984c6ef5505f831b59b9136e66c6ad2db4bc2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 18 Mar 2020 00:20:13 -0700 Subject: [PATCH 0191/1298] TS: marma test cases * the karma test cases are now all working again (found some actual issues in new TS code) * most test changes are `let` vs `var` getSttribute() returning NULL instead of undefined and removing jquery calls * code coverage NOT working right now (need to figure how to test .ts files ?) * reverted karma.config.js for now (pre TS changes) more #1084 --- README.md | 2 + doc/README.md | 15 +- karma.conf.js | 25 +- package.json | 3 +- spec/gridstack-engine-spec.js | 207 ++++++---- spec/gridstack-spec.js | 741 +++++++++++++++------------------- spec/utils-spec.js | 12 +- src/gridstack.ts | 37 +- src/utils.ts | 2 +- 9 files changed, 511 insertions(+), 533 deletions(-) diff --git a/README.md b/README.md index 24633d688..51483b3df 100644 --- a/README.md +++ b/README.md @@ -336,6 +336,8 @@ Also legacy methods that used to take tons of parameters will now take an object ``` removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {x, y, with,...})` `float()` to get value --> `getFloat()` +'cellHeight()` to get value --> `getCellheight()` +'verticalMargin()` to get value --> `getVerticalMargin()` ``` Changes diff --git a/doc/README.md b/doc/README.md index dddaa1b60..281ff7799 100644 --- a/doc/README.md +++ b/doc/README.md @@ -24,7 +24,6 @@ gridstack.js API - [addWidget(el, [options])](#addwidgetel-options) - [batchUpdate()](#batchupdate) - [compact()](#compact) - - [cellHeight()](#cellheight) - [cellHeight(val, noUpdate)](#cellheightval-noupdate) - [cellWidth()](#cellwidth) - [commit()](#commit) @@ -35,6 +34,7 @@ gridstack.js API - [enableMove(doEnable, includeNewWidgets)](#enablemovedoenable-includenewwidgets) - [enableResize(doEnable, includeNewWidgets)](#enableresizedoenable-includenewwidgets) - [float(val?)](#floatval) + - [getCellHeight()](#getcellheight) - [getCellFromPixel(position[, useOffset])](#getcellfrompixelposition-useoffset) - [isAreaEmpty(x, y, width, height)](#isareaemptyx-y-width-height) - [locked(el, val)](#lockedel-val) @@ -52,7 +52,7 @@ gridstack.js API - [setAnimation(doAnimate)](#setanimationdoanimate) - [setStatic(staticValue)](#setstaticstaticvalue) - [update(el, x, y, width, height)](#updateel-x-y-width-height) - - [verticalMargin()](#verticalmargin) + - [getVerticalMargin()](#getverticalmargin) - [verticalMargin(value, noUpdate)](#verticalmarginvalue-noupdate) - [willItFit(x, y, width, height, autoPosition)](#willitfitx-y-width-height-autoposition) - [Utils](#utils) @@ -261,10 +261,6 @@ starts batch updates. You will see no changes until `commit()` method is called. re-layout grid items to reclaim any empty space. -### cellHeight() - -Gets current cell height. - ### cellHeight(val, noUpdate) Update current cell height. This method rebuilds an internal CSS stylesheet (unless optional noUpdate=true). Note: You can expect performance issues if @@ -342,6 +338,11 @@ set/get floating widgets (default: `false`) - `val` - boolean to set true/false, else get the current value +### getCellHeight() + +Gets current cell height. + + ### getCellFromPixel(position[, useOffset]) Get the position of the cell under a pixel on screen. @@ -478,7 +479,7 @@ Parameters: Updates widget position/size. -### verticalMargin() +### getVerticalMargin() returns current vertical margin value. diff --git a/karma.conf.js b/karma.conf.js index f74f2d122..a4b56b442 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -3,16 +3,6 @@ module.exports = function(config) { config.set({ - karmaTypescriptConfig: { - compilerOptions: { - module: 'commonjs', - lib: ['dom', 'es6'], - target: 'es5', - sourceMap: true, - declaration: true - } - }, - // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', @@ -20,14 +10,13 @@ module.exports = function(config) { // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine', 'karma-typescript'], + frameworks: ['jasmine'], // list of files / patterns to load in the browser files: [ 'dist/gridstack.all.js', 'spec/*-spec.js', - 'src/**/*.ts' // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined ], @@ -40,19 +29,17 @@ module.exports = function(config) { // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - 'src/gridstack-dragdrop-plugin.ts': ['coverage'], - 'src/gridstack.engine.ts': ['coverage'], - 'src/gridstack.ts': ['coverage'], - 'src/jqueryui-gridstack-dragdrop-plugin.ts': ['coverage'], - 'src/utils.ts': ['coverage'], - 'src/*.ts': ['karma-typescript'] + 'dist/gridstack-engine.js': ['coverage'], + 'dist/gridstack.js': ['coverage'], + 'dist/jqueryui-gridstack-dragdrop-plugin': ['coverage'], + 'dist/utils.js': ['coverage'] }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'coverage', 'coveralls', 'karma-typescript'], + reporters: ['progress', 'coverage', 'coveralls'], coverageReporter: { type: 'lcov', // lcov or lcovonly are required for generating lcov.info files diff --git a/package.json b/package.json index 4cf74b964..9b5e77fa7 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,7 @@ "scripts": { "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "web": "rm -rf dist/* && webpack", - "test": "karma start karma.conf.js", - "test2": "yarn lint && karma start karma.conf.js", + "test": "yarn lint && karma start karma.conf.js", "lint": "tsc --noEmit && eslint src/*.ts", "reset": "rm -rf dist node_modules", "prepublishOnly": "yarn build" diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.js index 95c402169..947aea58c 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.js @@ -1,36 +1,58 @@ describe('gridstack engine', function() { 'use strict'; + let engine; + let e = GridStack.Engine; + let w = window; - var e; - var w; + let findNode = function(engine, id) { + return engine.nodes.find(function(i) { return i._id === id; }); + }; - beforeEach(function() { - w = window; - e = GridStack.Engine; + it('should exist setup function.', function() { + expect(e).not.toBeNull(); + expect(typeof e).toBe('function'); }); describe('test constructor', function() { - var engine; - - beforeAll(function() { - engine = new GridStack.Engine(12); - }); - + it('should be setup properly', function() { + engine = new GridStack.Engine(12); expect(engine.column).toEqual(12); expect(engine.float).toEqual(false); expect(engine.maxRow).toEqual(0); expect(engine.nodes).toEqual([]); + expect(engine.onchange).toEqual(undefined); + expect(engine.batchMode).toEqual(undefined); + }); + + it('should set params correctly.', function() { + let fkt = function() { }; + let arr = [1,2,3]; + engine = new GridStack.Engine(1, fkt, true, 2, arr); + expect(engine.column).toEqual(1); + expect(engine.float).toBe(true); + expect(engine.maxRow).toEqual(2); + expect(engine.nodes).toEqual(arr); + expect(engine.onchange).toEqual(fkt); + expect(engine.batchMode).toEqual(undefined); }); }); + describe('batch update', function() { + + it('should set float and batchMode when calling batchUpdate.', function() { + // Note: legacy weird call on global window to hold data + e.prototype.batchUpdate.call(w); + expect(w.float).toBe(undefined); + expect(w.batchMode).toBeTrue(); + }); + }); + describe('test prepareNode', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12); }); - it('should prepare a node', function() { expect(engine.prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); expect(engine.prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, width: 1, height: 1})); @@ -49,8 +71,53 @@ describe('gridstack engine', function() { }); }); + describe('sorting of nodes', function() { + // Note: legacy weird call on global window to hold data + it('should sort ascending with 12 columns.', function() { + w.column = 12; + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, 1); + expect(w.nodes).toEqual([{x: 7, y: 0}, {x: 9, y: 0}, {x: 0, y: 1}, {x: 4, y: 4}]); + }); + + it('should sort descending with 12 columns.', function() { + w.column = 12; + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, -1); + expect(w.nodes).toEqual([{x: 4, y: 4}, {x: 0, y: 1}, {x: 9, y: 0}, {x: 7, y: 0}]); + }); + + it('should sort ascending with 1 columns.', function() { + w.column = 1; + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, 1); + expect(w.nodes).toEqual([{x: 0, y: 1}, {x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}]); + }); + + it('should sort descending with 1 columns.', function() { + w.column = 1; + w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; + e.prototype._sortNodes.call(w, -1); + expect(w.nodes).toEqual([{x: 9, y: 0}, {x: 4, y: 4}, {x: 7, y: 0}, {x: 0, y: 1}]); + }); + + it('should sort ascending without columns.', function() { + w.column = undefined; + w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; + e.prototype._sortNodes.call(w, 1); + expect(w.nodes).toEqual([{x: 7, y: 0, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}, {x: 4, y: 4, width: 1}]); + }); + + it('should sort descending without columns.', function() { + w.column = undefined; + w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; + e.prototype._sortNodes.call(w, -1); + expect(w.nodes).toEqual([{x: 4, y: 4, width: 1}, {x: 0, y: 1, width: 1}, {x: 9, y: 0, width: 1}, {x: 7, y: 0, width: 1}]); + }); + + }); + describe('test isAreaEmpty', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -71,7 +138,6 @@ describe('gridstack engine', function() { }); describe('test cleanNodes/getDirtyNodes', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -83,34 +149,29 @@ describe('gridstack engine', function() { }); beforeEach(function() { - engine._batchMode = false; + engine.batchMode = false; }); it('should return all dirty nodes', function() { - var nodes = engine.getDirtyNodes(); - + let nodes = engine.getDirtyNodes(); expect(nodes.length).toEqual(2); expect(nodes[0].idx).toEqual(1); expect(nodes[1].idx).toEqual(2); }); - it('should\'n clean nodes if _batchMode true', function() { - engine._batchMode = true; + it('should\'n clean nodes if batchMode true', function() { + engine.batchMode = true; engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toBeGreaterThan(0); }); it('should clean all dirty nodes', function() { engine.cleanNodes(); - expect(engine.getDirtyNodes().length).toEqual(0); }); }); describe('test batchUpdate/commit', function() { - var engine; - beforeAll(function() { engine = new GridStack.Engine(12); }); @@ -118,26 +179,25 @@ describe('gridstack engine', function() { it('should work on not float grids', function() { expect(engine.float).toEqual(false); engine.batchUpdate(); - expect(engine._batchMode).toBeTrue(); + expect(engine.batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine._batchMode).toBeFalse(); + expect(engine.batchMode).toBeFalse(); expect(engine.float).toEqual(false); }); it('should work on float grids', function() { engine.float = true; engine.batchUpdate(); - expect(engine._batchMode).toBeTrue(); + expect(engine.batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine._batchMode).toBeFalse(); + expect(engine.batchMode).toBeFalse(); expect(engine.float).toEqual(true); }); }); describe('test batchUpdate/commit', function() { - var engine; beforeAll(function() { engine = new GridStack.Engine(12, null, true); @@ -146,26 +206,23 @@ describe('gridstack engine', function() { it('should work on float grids', function() { expect(engine.float).toEqual(true); engine.batchUpdate(); - expect(engine._batchMode).toBeTrue(); + expect(engine.batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine._batchMode).toBeFalse(); + expect(engine.batchMode).toBeFalse(); expect(engine.float).toEqual(true); }); }); describe('test _notify', function() { - var engine; - var spy; + let spy; beforeEach(function() { spy = { callback: function() {} }; spyOn(spy, 'callback'); - engine = new GridStack.Engine(12, spy.callback, true); - engine.nodes = [ engine.prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), engine.prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), @@ -173,16 +230,14 @@ describe('gridstack engine', function() { ]; }); - it('should\'n be called if _batchMode true', function() { - engine._batchMode = true; + it('should\'n be called if batchMode true', function() { + engine.batchMode = true; engine._notify(); - expect(spy.callback).not.toHaveBeenCalled(); }); it('should by called with dirty nodes', function() { engine._notify(); - expect(spy.callback).toHaveBeenCalledWith([ engine.nodes[0], engine.nodes[1] @@ -190,10 +245,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed', function() { - var n1 = {idx: -1}; - + let n1 = {idx: -1}; engine._notify(n1); - expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -202,10 +255,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed and should maintain false parameter', function() { - var n1 = {idx: -1}; - + let n1 = {idx: -1}; engine._notify(n1, false); - expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -216,12 +267,6 @@ describe('gridstack engine', function() { describe('test _packNodes', function() { describe('using not float mode', function() { - var engine; - - var findNode = function(engine, id) { - return engine.nodes.find(function(i) { return i._id === id; }); - }; - beforeEach(function() { engine = new GridStack.Engine(12, null, false); }); @@ -230,9 +275,7 @@ describe('gridstack engine', function() { engine.nodes = [ {x: 0, y: 0, width: 1, height: 1, _id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); }); @@ -241,9 +284,7 @@ describe('gridstack engine', function() { engine.nodes = [ {x: 0, y: 1, width: 1, height: 1, _id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); }); @@ -252,33 +293,27 @@ describe('gridstack engine', function() { {x: 0, y: 1, width: 1, height: 1, _id: 1}, {x: 0, y: 5, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); }); - + it('should pack nodes correctly', function() { engine.nodes = [ {x: 0, y: 5, width: 1, height: 1, _id: 1}, {x: 0, y: 1, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1, _dirty: true})); expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1, _dirty: true})); }); - + it('should respect locked nodes', function() { engine.nodes = [ {x: 0, y: 1, width: 1, height: 1, _id: 1, locked: true}, {x: 0, y: 5, width: 1, height: 1, _id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 1, height: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, width: 1, height: 1, _dirty: true})); @@ -287,35 +322,57 @@ describe('gridstack engine', function() { }); describe('test isNodeChangedPosition', function() { - var engine; - beforeAll(function() { engine = new GridStack.Engine(12); }); - it('should return true for changed x', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 2, 2)).toEqual(true); }); - it('should return true for changed y', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 1)).toEqual(true); }); - it('should return true for changed width', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 2, 2, 4, 4)).toEqual(true); }); - it('should return true for changed height', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 3)).toEqual(true); }); - it('should return false for unchanged position', function() { - var widget = { x: 1, y: 2, width: 3, height: 4 }; + let widget = { x: 1, y: 2, width: 3, height: 4 }; expect(engine.isNodeChangedPosition(widget, 1, 2, 3, 4)).toEqual(false); }); }); + + describe('test locked widget', function() { + beforeAll(function() { + engine = new GridStack.Engine(12); + }); + it('should add widgets around locked one', function() { + let nodes = [ + {x: 0, y: 1, width: 12, height: 1, locked: 'yes', noMove: true, noResize: true, _id: 1}, + {x: 1, y: 0, width: 2, height: 3, _id: 2} + ]; + // add locked item + engine.addNode(nodes[0]) + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 12, height: 1, locked: 'yes'})); + engine.addNode(nodes[1]) + // add item that moves past locked one + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, width: 12, height: 1, locked: 'yes'})); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 1, y: 2})); + // prevents moving locked item + let node1 = findNode(engine, 1); + expect(engine.moveNode(node1, 6, 6)).toEqual(null); + // but moves regular one (gravity ON) + let node2 = findNode(engine, 2); + expect(engine.moveNode(node2, 6, 6)).toEqual(jasmine.objectContaining({x: 6, y: 2, width: 2, height: 3,})); + // but moves regular one (gravity OFF) + engine.float = true; + expect(engine.moveNode(node2, 7, 6)).toEqual(jasmine.objectContaining({x: 7, y: 6, width: 2, height: 3,})); + }); + }); + }); diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index 2473600d4..c734d1a5d 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -1,10 +1,8 @@ describe('gridstack', function() { 'use strict'; - var e; - var w; // grid has 4x2 and 4x4 top-left aligned - used on most test cases - var gridstackHTML = + let gridstackHTML = '
    ' + '
    ' + '
    ' + @@ -16,90 +14,15 @@ describe('gridstack', function() { '
    ' + '
    '; // empty grid - var gridstackEmptyHTML = + let gridstackEmptyHTML = '
    ' + '
    ' + '
    ' + '
    '; // generic widget with no param - var widgetHTML = '
    hello
    '; + let widgetHTML = '
    hello
    '; beforeEach(function() { - w = window; - e = GridStack.Engine; - }); - - describe('setup of gridstack', function() { - - it('should exist setup function.', function() { - - expect(e).not.toBeNull(); - expect(typeof e).toBe('function'); - }); - - it('should set default params correctly.', function() { - e.call(w); - expect(w.column).toEqual(12); - expect(w.float).toBe(false); - expect(w.maxRow).toEqual(0); - expect(w.nodes).toEqual([]); - expect(typeof w.onchange).toBe('function'); - expect(w._batchMode).toBeFalse(); - }); - - it('should set params correctly.', function() { - var fkt = function() { }; - var arr = [1,2,3]; - - e.call(w, 1, fkt, true, 2, arr); - expect(w.column).toEqual(1); - expect(w.float).toBe(true); - expect(w.maxRow).toEqual(2); - expect(w.nodes).toEqual(arr); - expect(w.onchange).toEqual(fkt); - expect(w._batchMode).toBeFalse(); - }); - }); - - describe('batch update', function() { - - it('should set float and batchMode when calling batchUpdate.', function() { - e.prototype.batchUpdate.call(w); - expect(w.float).toBe(true); - expect(w._batchMode).toBeTrue(); - }); - - //test commit function - }); - - describe('sorting of nodes', function() { - - it('should sort ascending with columns.', function() { - w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; - e.prototype._sortNodes.call(w, 1); - expect(w.nodes).toEqual([{x: 0, y: 1}, {x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}]); - }); - - it('should sort descending with columns.', function() { - w.nodes = [{x: 7, y: 0}, {x: 4, y: 4}, {x: 9, y: 0}, {x: 0, y: 1}]; - e.prototype._sortNodes.call(w, -1); - expect(w.nodes).toEqual([{x: 9, y: 0}, {x: 4, y: 4}, {x: 7, y: 0}, {x: 0, y: 1}]); - }); - - it('should sort ascending without columns.', function() { - w.column = undefined; - w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; - e.prototype._sortNodes.call(w, 1); - expect(w.nodes).toEqual([{x: 7, y: 0, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}, {x: 4, y: 4, width: 1}]); - }); - - it('should sort descending without columns.', function() { - w.column = undefined; - w.nodes = [{x: 7, y: 0, width: 1}, {x: 4, y: 4, width: 1}, {x: 9, y: 0, width: 1}, {x: 0, y: 1, width: 1}]; - e.prototype._sortNodes.call(w, -1); - expect(w.nodes).toEqual([{x: 4, y: 4, width: 1}, {x: 0, y: 1, width: 1}, {x: 9, y: 0, width: 1}, {x: 7, y: 0, width: 1}]); - }); - }); describe('grid.setAnimation', function() { @@ -110,21 +33,21 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should add class grid-stack-animate to the container.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); $('.grid-stack').removeClass('grid-stack-animate'); grid.setAnimation(true); expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(true); }); it('should remove class grid-stack-animate from the container.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); $('.grid-stack').addClass('grid-stack-animate'); grid.setAnimation(false); expect($('.grid-stack').hasClass('grid-stack-animate')).toBe(false); @@ -139,23 +62,23 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should add class grid-stack-static to the container.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, staticGrid: true }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); $('.grid-stack').removeClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); }); it('should remove class grid-stack-static from the container.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, staticGrid: false }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); $('.grid-stack').addClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); @@ -170,36 +93,36 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should return {x: 2, y: 5}.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var container = $('.grid-stack'); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel); + let grid = GridStack.init(options); + let container = $('.grid-stack'); + let pixel = {top: 500, left: 200}; + let cell = grid.getCellFromPixel(pixel); expect(cell.x).toBe(2); expect(cell.y).toBe(5); }); it('should return {x: 2, y: 5}.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel, false); + let grid = GridStack.init(options); + let pixel = {top: 500, left: 200}; + let cell = grid.getCellFromPixel(pixel, false); expect(cell.x).toBe(2); expect(cell.y).toBe(5); }); it('should return {x: 2, y: 5}.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var pixel = {top: 500, left: 200}; - var cell = grid.getCellFromPixel(pixel, true); + let grid = GridStack.init(options); + let pixel = {top: 500, left: 200}; + let cell = grid.getCellFromPixel(pixel, true); expect(cell.x).toBe(2); expect(cell.y).toBe(5); }); @@ -213,23 +136,23 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should return 1/12th of container width.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, column: 12 }; - var grid = GridStack.init(options); - var res = Math.round($('.grid-stack').outerWidth() / 12); + let grid = GridStack.init(options); + let res = Math.round($('.grid-stack').outerWidth() / 12); expect(grid.cellWidth()).toBe(res); }); it('should return 1/10th of container width.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, column: 10 }; - var grid = GridStack.init(options); - var res = Math.round($('.grid-stack').outerWidth() / 10); + let grid = GridStack.init(options); + let res = Math.round($('.grid-stack').outerWidth() / 10); expect(grid.cellWidth()).toBe(res); }); }); @@ -242,34 +165,34 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should start at 80 then become 120', function() { - var cellHeight = 80; - var verticalMargin = 10; - var options = { + let cellHeight = 80; + let verticalMargin = 10; + let options = { cellHeight: cellHeight, verticalMargin: verticalMargin, column: 12 }; - var grid = GridStack.init(options); - var container = $('.grid-stack'); - var rows = parseInt(container.attr('data-gs-current-row')); + let grid = GridStack.init(options); + let container = $('.grid-stack'); + let rows = parseInt(container.attr('data-gs-current-row')); expect(grid.getRow()).toBe(rows); - expect(grid.cellHeight()).toBe(cellHeight); + expect(grid.getCellHeight()).toBe(cellHeight); expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); - grid.cellHeight( grid.cellHeight() ); // should be no-op - expect(grid.cellHeight()).toBe(cellHeight); + grid.cellHeight( grid.getCellHeight() ); // should be no-op + expect(grid.getCellHeight()).toBe(cellHeight); expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); cellHeight = 120; // should change and CSS actual height grid.cellHeight( cellHeight ); - expect(grid.cellHeight()).toBe(cellHeight); + expect(grid.getCellHeight()).toBe(cellHeight); expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); cellHeight = 20; // should change and CSS actual height grid.cellHeight( cellHeight ); - expect(grid.cellHeight()).toBe(cellHeight); + expect(grid.getCellHeight()).toBe(cellHeight); expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); }); }); @@ -282,41 +205,41 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should have no changes', function() { - var grid = GridStack.init(); - expect(grid.column()).toBe(12); + let grid = GridStack.init(); + expect(grid.getColumn()).toBe(12); grid.column(12); - expect(grid.column()).toBe(12); - }); + expect(grid.getColumn()).toBe(12); + }); it('should SMALL change column number, no relayout', function() { - var options = { + let options = { column: 12 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); grid.column(10, false); - expect(grid.column()).toBe(10); - for (var j = 0; j < items.length; j++) { + expect(grid.getColumn()).toBe(10); + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } grid.column(9, true); - expect(grid.column()).toBe(9); - for (var j = 0; j < items.length; j++) { + expect(grid.getColumn()).toBe(9); + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } grid.column(12); - expect(grid.column()).toBe(12); - for (var j = 0; j < items.length; j++) { + expect(grid.getColumn()).toBe(12); + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-y'), 10)).toBe(0); } }); it('should change column number and relayout items', function() { - var options = { + let options = { column: 12, float: true }; - var grid = GridStack.init(options); - var el1 = $('#item1') - var el2 = $('#item2') + let grid = GridStack.init(options); + let el1 = $('#item1') + let el2 = $('#item2') // items start at 4x2 and 4x4 expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -330,7 +253,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // 1 column will have item1, item2 grid.column(1); - expect(grid.column()).toBe(1); + expect(grid.getColumn()).toBe(1); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(1); @@ -342,7 +265,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // add default 1x1 item to the end (1 column) - var el3 = $(grid.addWidget(widgetHTML)); + let el3 = $(grid.addWidget(widgetHTML)); expect(el3).not.toBe(null); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(6); @@ -351,7 +274,7 @@ describe('gridstack', function() { // back to 12 column and initial layout (other than new item3) grid.column(12); - expect(grid.column()).toBe(12); + expect(grid.getColumn()).toBe(12); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(0); expect(parseInt(el1.attr('data-gs-width'))).toBe(4); @@ -369,8 +292,8 @@ describe('gridstack', function() { // back to 1 column, move item2 to beginning to [3][1][2] vertically grid.column(1); - expect(grid.column()).toBe(1); - grid.move(el3, 0, 0); + expect(grid.getColumn()).toBe(1); + grid.move(el3.get(0), 0, 0); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); expect(parseInt(el3.attr('data-gs-width'))).toBe(1); @@ -388,7 +311,7 @@ describe('gridstack', function() { // back to 12 column, el3 to be beginning still, but [1][2] to be in 1 columns still but wide 4x2 and 4x still grid.column(12); - expect(grid.column()).toBe(12); + expect(grid.getColumn()).toBe(12); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); expect(parseInt(el3.attr('data-gs-width'))).toBe(1); @@ -407,7 +330,7 @@ describe('gridstack', function() { // 2 column will have item1, item2, item3 in 1 column still but half the width grid.column(1); // test convert from small, should use 12 layout still grid.column(2); - expect(grid.column()).toBe(2); + expect(grid.getColumn()).toBe(2); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(0); @@ -434,14 +357,14 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should support default going to 1 column', function() { - var options = { + let options = { column: 12, float: true }; - var grid = GridStack.init(options); - var el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); - var el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); - var el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); + let grid = GridStack.init(options); + let el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); + let el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); + let el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); // items are item1[1x1], item3[1x1], item2[2x1] expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -477,15 +400,15 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(1); }); it('should support oneColumnModeDomSort ON going to 1 column', function() { - var options = { + let options = { column: 12, oneColumnModeDomSort: true, float: true }; - var grid = GridStack.init(options); - var el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); - var el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); - var el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); + let grid = GridStack.init(options); + let el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); + let el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); + let el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); // items are item1[1x1], item3[1x1], item2[2x1] expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -530,16 +453,16 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should set data-gs-min-width to 2.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { grid.minWidth(items[i], 2); } - for (var j = 0; j < items.length; j++) { + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-min-width'), 10)).toBe(2); } }); @@ -553,16 +476,16 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should set data-gs-min-width to 2.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { grid.maxWidth(items[i], 2); } - for (var j = 0; j < items.length; j++) { + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-max-width'), 10)).toBe(2); } }); @@ -576,16 +499,16 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should set data-gs-min-height to 2.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { grid.minHeight(items[i], 2); } - for (var j = 0; j < items.length; j++) { + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-min-height'), 10)).toBe(2); } }); @@ -599,16 +522,10 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should set data-gs-min-height to 2.', function() { - var options = { - cellHeight: 80, - verticalMargin: 10 - }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - grid.maxHeight(items[i], 2); - } - for (var j = 0; j < items.length; j++) { + let grid = GridStack.init(); + let items = $('.grid-stack-item'); + grid.maxHeight('.grid-stack-item', 2); + for (let j = 0; j < items.length; j++) { expect(parseInt($(items[j]).attr('data-gs-max-height'), 10)).toBe(2); } }); @@ -622,21 +539,21 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should set return false.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); + let grid = GridStack.init(options); + let shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); expect(shouldBeFalse).toBe(false); }); it('should set return true.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); + let grid = GridStack.init(options); + let shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); expect(shouldBeTrue).toBe(true); }); }); @@ -649,19 +566,19 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should remove all children by default', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); grid.removeAll(); expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); it('should remove all children', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); grid.removeAll(true); expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).toBe(null); }); it('should remove gridstack part, leave DOM behind', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); grid.removeAll(false); expect(grid.engine.nodes).toEqual([]); expect(document.getElementById('item1')).not.toBe(null); @@ -676,22 +593,22 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should remove first item (default), then second (true), then third (false)', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); expect(grid.engine.nodes.length).toEqual(2); - var el1 = document.getElementById('item1'); + let el1 = document.getElementById('item1'); expect(el1).not.toBe(null); grid.removeWidget(el1); expect(grid.engine.nodes.length).toEqual(1); expect(document.getElementById('item1')).toBe(null); expect(document.getElementById('item2')).not.toBe(null); - var el2 = document.getElementById('item2'); + let el2 = document.getElementById('item2'); grid.removeWidget(el2, true); expect(grid.engine.nodes.length).toEqual(0); expect(document.getElementById('item2')).toBe(null); - var el3 = grid.addWidget(widgetHTML); + let el3 = grid.addWidget(widgetHTML); expect(el3).not.toBe(null); grid.removeWidget(el3, false); expect(grid.engine.nodes.length).toEqual(0); @@ -707,16 +624,16 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should allow same x, y coordinates for widgets.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, float: true }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - var $el; - var $oldEl; - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + let $el; + let $oldEl; + for (let i = 0; i < items.length; i++) { $el = $(grid.addWidget(items[i])); $oldEl = $(items[i]); expect(parseInt($oldEl.attr('data-gs-x'), 10)).toBe(parseInt($el.attr('data-gs-x'), 10)); @@ -724,21 +641,21 @@ describe('gridstack', function() { } }); it('should not allow same x, y coordinates for widgets.', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - var $el; - var $oldEl; - var newY; - var oldY; - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + let $el; + let $oldEl; + let newY; + let oldY; + for (let i = 0; i < items.length; i++) { $oldEl = $.extend(true, {}, $(items[i])); newY = parseInt($oldEl.attr('data-gs-y'), 10) + 5; $oldEl.attr('data-gs-y', newY); - $el = $(grid.addWidget($oldEl)); + $el = $(grid.addWidget($oldEl.get(0))); expect(parseInt($el.attr('data-gs-y'), 10)).not.toBe(newY); } }); @@ -752,49 +669,49 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should keep all widget options the same (autoPosition off', function() { - var grid = GridStack.init({float: true});; - var widget = grid.addWidget(widgetHTML, {x: 6, y:7, width:2, height:3, autoPosition:false, - mindWidth:1, maxWidth:4, mindHeight:2, maxHeight:5, id:'coolWidget'}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(7); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); - expect($widget.attr('data-gs-auto-position')).toBe(undefined); - expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); - expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); - expect($widget.attr('data-gs-id')).toBe('coolWidget'); + let grid = GridStack.init({float: true});; + let widget = grid.addWidget(widgetHTML, {x: 6, y:7, width:2, height:3, autoPosition:false, + minWidth:1, maxWidth:4, minHeight:2, maxHeight:5, id:'coolWidget'}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(6); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(7); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(3); + expect(widget.getAttribute('data-gs-auto-position')).toBe(null); + expect(parseInt(widget.getAttribute('data-gs-min-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-max-width'), 10)).toBe(4); + expect(parseInt(widget.getAttribute('data-gs-min-height'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-max-height'), 10)).toBe(5); + expect(widget.getAttribute('data-gs-id')).toBe('coolWidget'); // should move widget to top with float=false expect(grid.getFloat()).toBe(true); grid.float(false); expect(grid.getFloat()).toBe(false); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); // <--- from 7 to 4 below second original widget - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); - expect($widget.attr('data-gs-auto-position')).toBe(undefined); - expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); - expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); - expect($widget.attr('data-gs-id')).toBe('coolWidget'); + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(6); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(4); // <--- from 7 to 4 below second original widget + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(3); + expect(widget.getAttribute('data-gs-auto-position')).toBe(null); + expect(parseInt(widget.getAttribute('data-gs-min-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-max-width'), 10)).toBe(4); + expect(parseInt(widget.getAttribute('data-gs-min-height'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-max-height'), 10)).toBe(5); + expect(widget.getAttribute('data-gs-id')).toBe('coolWidget'); // should not move again (no-op) grid.float(true); expect(grid.getFloat()).toBe(true); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(6); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(4); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(3); - expect($widget.attr('data-gs-auto-position')).toBe(undefined); - expect(parseInt($widget.attr('data-gs-min-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); - expect(parseInt($widget.attr('data-gs-min-height'), 10)).toBe(2); - expect(parseInt($widget.attr('data-gs-max-height'), 10)).toBe(5); - expect($widget.attr('data-gs-id')).toBe('coolWidget'); + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(6); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(4); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(3); + expect(widget.getAttribute('data-gs-auto-position')).toBe(null); + expect(parseInt(widget.getAttribute('data-gs-min-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-max-width'), 10)).toBe(4); + expect(parseInt(widget.getAttribute('data-gs-min-height'), 10)).toBe(2); + expect(parseInt(widget.getAttribute('data-gs-max-height'), 10)).toBe(5); + expect(widget.getAttribute('data-gs-id')).toBe('coolWidget'); }); }); @@ -806,11 +723,11 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should change x, y coordinates for widgets.', function() { - var grid = GridStack.init({float: true}); - var widget = grid.addWidget(widgetHTML, {x:9, y:7, width:2, height:3, autoPosition:true}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).not.toBe(9); - expect(parseInt($widget.attr('data-gs-y'), 10)).not.toBe(7); + let grid = GridStack.init({float: true}); + let widget = grid.addWidget(widgetHTML, {x:9, y:7, width:2, height:3, autoPosition:true}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).not.toBe(9); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).not.toBe(7); }); }); @@ -822,78 +739,78 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should autoPosition (missing X,Y)', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {height: 2, id: 'optionWidget'}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(2); - expect($widget.attr('data-gs-auto-position')).toBe('true'); - expect($widget.attr('data-gs-min-width')).toBe(undefined); - expect($widget.attr('data-gs-max-width')).toBe(undefined); - expect($widget.attr('data-gs-min-height')).toBe(undefined); - expect($widget.attr('data-gs-max-height')).toBe(undefined); - expect($widget.attr('data-gs-id')).toBe('optionWidget'); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {height: 2, id: 'optionWidget'}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(2); + // expect(widget.getAttribute('data-gs-auto-position')).toBe('true'); + expect(widget.getAttribute('data-gs-min-width')).toBe(null); + expect(widget.getAttribute('data-gs-max-width')).toBe(null); + expect(widget.getAttribute('data-gs-min-height')).toBe(null); + expect(widget.getAttribute('data-gs-max-height')).toBe(null); + expect(widget.getAttribute('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (missing X)', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {y: 9, height: 2, id: 'optionWidget'}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(2); - expect($widget.attr('data-gs-auto-position')).toBe('true'); - expect($widget.attr('data-gs-min-width')).toBe(undefined); - expect($widget.attr('data-gs-max-width')).toBe(undefined); - expect($widget.attr('data-gs-min-height')).toBe(undefined); - expect($widget.attr('data-gs-max-height')).toBe(undefined); - expect($widget.attr('data-gs-id')).toBe('optionWidget'); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {y: 9, height: 2, id: 'optionWidget'}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(2); + // expect(widget.getAttribute('data-gs-auto-position')).toBe('true'); + expect(widget.getAttribute('data-gs-min-width')).toBe(null); + expect(widget.getAttribute('data-gs-max-width')).toBe(null); + expect(widget.getAttribute('data-gs-min-height')).toBe(null); + expect(widget.getAttribute('data-gs-max-height')).toBe(null); + expect(widget.getAttribute('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (missing Y)', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {x: 9, height: 2, id: 'optionWidget'}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(2); - expect($widget.attr('data-gs-auto-position')).toBe('true'); - expect($widget.attr('data-gs-min-width')).toBe(undefined); - expect($widget.attr('data-gs-max-width')).toBe(undefined); - expect($widget.attr('data-gs-min-height')).toBe(undefined); - expect($widget.attr('data-gs-max-height')).toBe(undefined); - expect($widget.attr('data-gs-id')).toBe('optionWidget'); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {x: 9, height: 2, id: 'optionWidget'}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(2); + // expect(widget.getAttribute('data-gs-auto-position')).toBe('true'); + expect(widget.getAttribute('data-gs-min-width')).toBe(null); + expect(widget.getAttribute('data-gs-max-width')).toBe(null); + expect(widget.getAttribute('data-gs-min-height')).toBe(null); + expect(widget.getAttribute('data-gs-max-height')).toBe(null); + expect(widget.getAttribute('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (correct X, missing Y)', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {x: 8, height: 2, id: 'optionWidget'}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(2); - expect($widget.attr('data-gs-auto-position')).toBe('true'); - expect($widget.attr('data-gs-min-width')).toBe(undefined); - expect($widget.attr('data-gs-max-width')).toBe(undefined); - expect($widget.attr('data-gs-min-height')).toBe(undefined); - expect($widget.attr('data-gs-max-height')).toBe(undefined); - expect($widget.attr('data-gs-id')).toBe('optionWidget'); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {x: 8, height: 2, id: 'optionWidget'}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(2); + // expect(widget.getAttribute('data-gs-auto-position')).toBe('true'); + expect(widget.getAttribute('data-gs-min-width')).toBe(null); + expect(widget.getAttribute('data-gs-max-width')).toBe(null); + expect(widget.getAttribute('data-gs-min-height')).toBe(null); + expect(widget.getAttribute('data-gs-max-height')).toBe(null); + expect(widget.getAttribute('data-gs-id')).toBe('optionWidget'); }); it('should autoPosition (empty options)', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(1); - expect($widget.attr('data-gs-auto-position')).toBe('true'); - expect($widget.attr('data-gs-min-width')).toBe(undefined); - expect($widget.attr('data-gs-max-width')).toBe(undefined); - expect($widget.attr('data-gs-min-height')).toBe(undefined); - expect($widget.attr('data-gs-max-height')).toBe(undefined); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(1); + // expect(widget.getAttribute('data-gs-auto-position')).toBe('true'); + expect(widget.getAttribute('data-gs-min-width')).toBe(null); + expect(widget.getAttribute('data-gs-max-width')).toBe(null); + expect(widget.getAttribute('data-gs-min-height')).toBe(null); + expect(widget.getAttribute('data-gs-max-height')).toBe(null); }); }); @@ -906,13 +823,13 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should use default', function() { - var grid = GridStack.init(); - var widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); - expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); - expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(1); + let grid = GridStack.init(); + let widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(1); }); }); @@ -924,12 +841,12 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should clear x position', function() { - var grid = GridStack.init({float: true}); - var widgetHTML = '
    '; - var widget = grid.addWidget(widgetHTML, {x:null, y:null, width:undefined}); - var $widget = $(widget); - expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); - expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); + let grid = GridStack.init({float: true}); + let widgetHTML = '
    '; + let widget = grid.addWidget(widgetHTML, {x:null, y:null, width:undefined}); + + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); }); }); @@ -941,7 +858,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should match true/false only', function() { - var grid = GridStack.init({float: true}); + let grid = GridStack.init({float: true}); expect(grid.getFloat()).toBe(true); grid.float(0); expect(grid.getFloat()).toBe(false); @@ -962,21 +879,21 @@ describe('gridstack', function() { //document.body.removeChild(document.getElementsByClassName('grid-stack')[0]); }); it('should cleanup gridstack', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); grid.destroy(); expect($('.grid-stack').length).toBe(0); expect(grid.engine).toBe(null); }); it('should cleanup gridstack but leave elements', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); grid.destroy(false); expect($('.grid-stack').length).toBe(1); expect($('.grid-stack-item').length).toBe(2); @@ -993,12 +910,12 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should resize widget', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); grid.resize(items[0], 5, 5); expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); @@ -1013,13 +930,13 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should move widget', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, float: true }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); grid.move(items[0], 5, 5); expect(parseInt($(items[0]).attr('data-gs-x'), 10)).toBe(5); expect(parseInt($(items[0]).attr('data-gs-y'), 10)).toBe(5); @@ -1034,22 +951,22 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should do nothing and return NULL to mean nothing happened', function() { - var grid = GridStack.init(); - var items = $('.grid-stack-item'); + let grid = GridStack.init(); + let items = $('.grid-stack-item'); grid._updateElement(items[0], function(el, node) { - var hasMoved = grid.engine.moveNode(node); + let hasMoved = grid.engine.moveNode(node); expect(hasMoved).toBe(null); }); }); it('should do nothing and return node', function() { - var grid = GridStack.init(); - var items = $('.grid-stack-item'); + let grid = GridStack.init(); + let items = $('.grid-stack-item'); grid.minWidth(items[0], 1); grid.maxWidth(items[0], 2); grid.minHeight(items[0], 1); grid.maxHeight(items[0], 2); grid._updateElement(items[0], function(el, node) { - var newNode = grid.engine.moveNode(node); + let newNode = grid.engine.moveNode(node); expect(newNode).toBe(node); }); }); @@ -1063,13 +980,13 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should move and resize widget', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, float: true }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); grid.update(items[0], 5, 5, 5 ,5); expect(parseInt($(items[0]).attr('data-gs-width'), 10)).toBe(5); expect(parseInt($(items[0]).attr('data-gs-height'), 10)).toBe(5); @@ -1086,39 +1003,39 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should return verticalMargin', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); - var vm = grid.verticalMargin(); + let grid = GridStack.init(options); + let vm = grid.getVerticalMargin(); expect(vm).toBe(10); }); it('should return update verticalMargin', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); grid.verticalMargin(11); - expect(grid.verticalMargin()).toBe(11); + expect(grid.getVerticalMargin()).toBe(11); }); it('should do nothing', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, }; - var grid = GridStack.init(options); - expect(grid.verticalMargin()).toBe(10); + let grid = GridStack.init(options); + expect(grid.getVerticalMargin()).toBe(10); grid.verticalMargin(10); - expect(grid.verticalMargin()).toBe(10); + expect(grid.getVerticalMargin()).toBe(10); }); it('should not update styles', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); spyOn(grid, '_updateStyles'); grid.verticalMargin(11, true); expect(grid._updateStyles).not.toHaveBeenCalled(); @@ -1133,20 +1050,20 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should add grid-stack-rtl class', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, rtl: true }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(true); }); it('should not add grid-stack-rtl class', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(false); }); }); @@ -1158,33 +1075,42 @@ describe('gridstack', function() { afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should enable move', function() { - var options = { + it('should enable move for future also', function() { + let options = { cellHeight: 80, verticalMargin: 10, minWidth: 1, disableDrag: true }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-disabled')).toBe(true); + } expect(grid.opts.disableDrag).toBe(true); + grid.enableMove(true, true); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(true); + for (let i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-disabled')).toBe(false); } expect(grid.opts.disableDrag).toBe(false); }); - it('should disable move', function() { - var options = { + it('should disable move for existing only', function() { + let options = { cellHeight: 80, verticalMargin: 10, minWidth: 1 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - grid.enableMove(false); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-disabled')).toBe(false); + } + expect(grid.opts.disableDrag).toBe(false); + + grid.enableMove(false, false); + for (let i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-disabled')).toBe(true); } expect(grid.opts.disableDrag).toBe(false); }); @@ -1198,31 +1124,31 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should enable resize', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, minWidth: 1, disableResize: true }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); expect(grid.opts.disableResize).toBe(true); grid.enableResize(true, true); - for (var i = 0; i < items.length; i++) { + for (let i = 0; i < items.length; i++) { expect(($(items[i]).resizable('option','disabled'))).toBe(false); } expect(grid.opts.disableResize).toBe(false); }); it('should disable resize', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, minWidth: 1 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); - grid.enableResize(false); - for (var i = 0; i < items.length; i++) { + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); + grid.enableResize(false, false); + for (let i = 0; i < items.length; i++) { expect(($(items[i]).resizable('option','disabled'))).toBe(true); } expect(grid.opts.disableResize).toBe(false); @@ -1237,22 +1163,22 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should enable movable and resizable', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10, minWidth: 1 }; - var grid = GridStack.init(options); - var items = $('.grid-stack-item'); + let grid = GridStack.init(options); + let items = $('.grid-stack-item'); grid.enableResize(false); grid.enableMove(false); - for (var i = 0; i < items.length; i++) { - expect($(items[i]).hasClass('ui-draggable-handle')).toBe(false); + for (let i = 0; i < items.length; i++) { + expect($(items[i]).hasClass('ui-draggable-disabled')).toBe(true); expect(($(items[i]).resizable('option','disabled'))).toBe(true); } grid.enable(); - for (var j = 0; j < items.length; j++) { - expect($(items[j]).hasClass('ui-draggable-handle')).toBe(true); + for (let j = 0; j < items.length; j++) { + expect($(items[j]).hasClass('ui-draggable-disabled')).toBe(false); expect(($(items[j]).resizable('option','disabled'))).toBe(false); } }); @@ -1266,22 +1192,22 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should lock widgets', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); grid.locked('.grid-stack-item', true); $('.grid-stack-item').each(function (i,item) { expect($(item).attr('data-gs-locked')).toBe('yes'); }) }); it('should unlock widgets', function() { - var options = { + let options = { cellHeight: 80, verticalMargin: 10 }; - var grid = GridStack.init(options); + let grid = GridStack.init(options); grid.locked('.grid-stack-item', false); $('.grid-stack-item').each(function (i,item) { expect($(item).attr('data-gs-locked')).toBe(undefined); @@ -1290,7 +1216,7 @@ describe('gridstack', function() { }); describe('custom grid placement #1054', function() { - var HTML = + let HTML = '
    ' + '
    ' + '
    ' + @@ -1307,7 +1233,7 @@ describe('gridstack', function() { '
    ' + '
    ' + '
    '; - var pos = [{x:0, y:0, w:12, h:9}, {x:0, y:9, w:12, h:5}, {x:0, y:14, w:7, h:6}, {x:7, y:14, w:5, h:6}]; + let pos = [{x:0, y:0, w:12, h:9}, {x:0, y:9, w:12, h:5}, {x:0, y:14, w:7, h:6}, {x:7, y:14, w:5, h:6}]; beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', HTML); }); @@ -1315,9 +1241,9 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should have correct position', function() { - var items = $('.grid-stack-item'); - for (var i = 0; i < items.length; i++) { - var item = $(items[i]); + let items = $('.grid-stack-item'); + for (let i = 0; i < items.length; i++) { + let item = $(items[i]); expect(parseInt(item.attr('data-gs-x'))).toBe(pos[i].x); expect(parseInt(item.attr('data-gs-y'))).toBe(pos[i].y); expect(parseInt(item.attr('data-gs-width'))).toBe(pos[i].w); @@ -1334,9 +1260,9 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should move all 3 items to top-left with no space', function() { - var grid = GridStack.init({float: true}); + let grid = GridStack.init({float: true}); - var el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5})); + let el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1345,9 +1271,9 @@ describe('gridstack', function() { expect(parseInt(el3.attr('data-gs-y'))).toBe(0); }); it('not move locked item', function() { - var grid = GridStack.init({float: true}); + let grid = GridStack.init({float: true}); - var el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5, locked: true, noMove: true})); + let el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5, locked: true, noMove: true})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1357,10 +1283,7 @@ describe('gridstack', function() { }); }); - - /* - * ...and finally track log warnings at the end, instead of displaying them.... - */ + // ..and finally track log warnings at the end, instead of displaying them.... describe('obsolete warnings', function() { console.warn = jasmine.createSpy('log'); // track warnings instead of displaying them beforeEach(function() { @@ -1369,20 +1292,22 @@ describe('gridstack', function() { afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); + /* TODO: it('warning if OLD setGridWidth is called', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); grid.setGridWidth(11); // old 0.5.2 API - expect(grid.column()).toBe(11); + expect(grid.getColumn()).toBe(11); expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `setGridWidth` is deprecated in v0.5.3 and has been replaced with `column`. It will be **completely** removed in v1.0'); }); it('warning if OLD setColumn is called', function() { - var grid = GridStack.init(); + let grid = GridStack.init(); grid.setColumn(10); // old 0.6.4 API - expect(grid.column()).toBe(10); + expect(grid.getColumn()).toBe(10); expect(console.warn).toHaveBeenCalledWith('gridstack.js: Function `setColumn` is deprecated in v0.6.4 and has been replaced with `column`. It will be **completely** removed in v1.0'); }); + */ it('warning if OLD grid height is set', function() { - var grid = GridStack.init({height: 10}); // old 0.5.2 Opt now maxRow + let grid = GridStack.init({height: 10}); // old 0.5.2 Opt now maxRow expect(grid.opts.maxRow).toBe(10); expect(grid.engine.maxRow).toBe(10); expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `height` is deprecated in v0.5.3 and has been replaced with `maxRow`. It will be **completely** removed in v1.0'); diff --git a/spec/utils-spec.js b/spec/utils-spec.js index c2259eb43..c134eb430 100644 --- a/spec/utils-spec.js +++ b/spec/utils-spec.js @@ -1,7 +1,7 @@ describe('gridstack utils', function() { 'use strict'; - var utils; + let utils; beforeEach(function() { utils = GridStack.Utils; @@ -11,7 +11,7 @@ describe('gridstack utils', function() { it('should set gridstack utils.', function() { expect(utils).not.toBeNull(); - expect(typeof utils).toBe('object'); + expect(typeof utils).toBe('function'); }); }); @@ -40,7 +40,7 @@ describe('gridstack utils', function() { }); describe('test isIntercepted', function() { - var src = {x: 3, y: 2, width: 3, height: 2}; + let src = {x: 3, y: 2, width: 3, height: 2}; it('should intercept.', function() { expect(utils.isIntercepted(src, {x: 0, y: 0, width: 4, height: 3})).toEqual(true); @@ -61,11 +61,11 @@ describe('gridstack utils', function() { describe('test createStylesheet/removeStylesheet', function() { it('should create/remove style DOM', function() { - var _id = 'test-123'; + let _id = 'test-123'; utils.createStylesheet(_id); - var style = $('STYLE[data-gs-style-id=' + _id + ']'); + let style = $('STYLE[data-gs-style-id=' + _id + ']'); expect(style.length).toEqual(1); expect(style.prop('tagName')).toEqual('STYLE'); @@ -111,7 +111,7 @@ describe('gridstack utils', function() { describe('test defaults', function() { it('should assign missing field or undefined', function() { - var src = {}; + let src = {}; expect(src).toEqual({}); expect(utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); expect(utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); diff --git a/src/gridstack.ts b/src/gridstack.ts index 891be845e..8384cbe8a 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -44,18 +44,26 @@ function getElement(els: GridStackElement): GridItemHTMLElement { (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); } function getElements(els: GridStackElement): GridItemHTMLElement[] { - return (typeof els === 'string' ? Array.from( - document.querySelectorAll(els) || document.querySelectorAll('#' + els) || document.querySelectorAll('.' + els) - ) : [els]); + if (typeof els === 'string') { + let list = document.querySelectorAll(els); + if (!list.length) { list = document.querySelectorAll('.' + els) } + if (!list.length) { list = document.querySelectorAll('#' + els) } + return Array.from(list) as GridItemHTMLElement[]; + } + return [els]; } function getGridElement(els: string | HTMLElement): GridHTMLElement { return (typeof els === 'string' ? (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); } function getGridElements(els: string | HTMLElement): GridHTMLElement[] { - return (typeof els === 'string' ? Array.from( - document.querySelectorAll(els) || document.querySelectorAll('#' + els) || document.querySelectorAll('.' + els) - ) : [els]); + if (typeof els === 'string') { + let list = document.querySelectorAll(els); + if (!list.length) { list = document.querySelectorAll('.' + els) } + if (!list.length) { list = document.querySelectorAll('#' + els) } + return Array.from(list) as GridHTMLElement[]; + } + return [els]; } /** @@ -354,8 +362,10 @@ export class GridStack { // support legacy call for now ? if (arguments.length > 2) { console.warn('gridstack.ts: `addWidget(el, x, y, width...)` is deprecated. Use `addWidget(el, {x, y, width,...})`. It will be removed soon'); + // eslint-disable-next-line prefer-rest-params let a = arguments, i = 1, - opt: GridstackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], minWidth:a[i++], maxWidth:a[i++], minHeight:a[i++], maxHeight:a[i++], id:a[i++] }; + opt: GridstackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], + minWidth:a[i++], maxWidth:a[i++], minHeight:a[i++], maxHeight:a[i++], id:a[i++] }; return this.addWidget(el, opt); } @@ -672,12 +682,11 @@ export class GridStack { * @param val A numeric value of the number of columns */ public maxWidth(els: GridStackElement, val: number): GridStack { - if (isNaN(val)) return; getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } node.maxWidth = (val || undefined); - if (node.maxWidth) { + if (val) { el.setAttribute('data-gs-max-width', String(val)); } else { el.removeAttribute('data-gs-max-width'); @@ -692,11 +701,10 @@ export class GridStack { * @param val A numeric value of the number of columns */ public minWidth(els: GridStackElement, val: number): GridStack { - if (isNaN(val)) return; getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } - if (node.minWidth) { + if (val) { el.setAttribute('data-gs-min-width', String(val)); } else { el.removeAttribute('data-gs-min-width'); @@ -711,11 +719,10 @@ export class GridStack { * @param val A numeric value of the number of rows */ public maxHeight(els: GridStackElement, val: number): GridStack { - if (isNaN(val)) return; getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } - if (node.maxHeight) { + if (val) { el.setAttribute('data-gs-max-height', String(val)); } else { el.removeAttribute('data-gs-max-height'); @@ -730,11 +737,10 @@ export class GridStack { * @param val A numeric value of the number of rows */ public minHeight(els: GridStackElement, val: number): GridStack { - if (isNaN(val)) return; getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } - if (node.minHeight) { + if (val) { el.setAttribute('data-gs-min-height', String(val)); } else { el.removeAttribute('data-gs-min-height'); @@ -1644,4 +1650,5 @@ export class GridStack { // legacy method renames private setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); private setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); + private getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } diff --git a/src/utils.ts b/src/utils.ts index 94d10b013..fe6d485f9 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -152,7 +152,7 @@ export class Utils { sources.forEach(function (source) { for (let prop in source) { - if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { + if (source.hasOwnProperty(prop) && (target[prop] === null || target[prop] === undefined)) { target[prop] = source[prop]; } } From 8138a1a8af3171351bf5b802d1520cfd3c3bbbb4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 19 Mar 2020 12:21:33 -0700 Subject: [PATCH 0192/1298] readme tweaks --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1da6af786..6bacacb4d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Join us on Slack: https://gridstackjs.troolee.com - [Touch devices support](#touch-devices-support) - [Migrating to v0.6.x](#migrating-to-v06x) - [Migrating to v1.0.0](#migrating-to-v100) + - [jQuery Application](#jquery-application) - [Changes](#changes) - [The Team](#the-team) @@ -93,7 +94,7 @@ creating items dynamically... ``` @@ -132,7 +133,7 @@ You can easily extend or patch gridstack with code like this: ```js // extend gridstack with our own custom method GridStack.prototype.printCount = function() { - console.log('grid has ' + this.grid.nodes.length + ' items'); + console.log('grid has ' + this.engine.nodes.length + ' items'); }; var grid = GridStack.init(); @@ -322,9 +323,9 @@ Other vars/global changes Recommend looking at the [many samples](./demo) for more code examples. -**NOTE: jQuery Applications** +### jQuery Application -We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.4.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring it's own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` + after you import your libs. +We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.4.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring it's own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your libs. Changes ===== @@ -335,4 +336,4 @@ View our change log [here](https://github.com/gridstack/gridstack.js/tree/develo The Team ======== -gridstack.js is currently maintained by [Dylan Weiss](https://github.com/radiolips) and [Alain Dumesny](https://github.com/adumesny), originally created by [Pavel Reznikov](https://github.com/troolee). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. +gridstack.js is currently maintained by [Alain Dumesny](https://github.com/adumesny) and [Dylan Weiss](https://github.com/radiolips), originally created by [Pavel Reznikov](https://github.com/troolee). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. From ff764971898355c6dcd760657f2e1b67c134cf82 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 20 Mar 2020 09:08:46 -0700 Subject: [PATCH 0193/1298] `staticGrid` no longer disable oneColumnMode * regression bug fix for #1229 --- doc/CHANGES.md | 2 +- doc/README.md | 2 +- spec/gridstack-spec.js | 2 ++ src/gridstack.d.ts | 7 ++++--- src/gridstack.js | 6 ++---- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 21e5181c4..6f7901dd9 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -35,7 +35,7 @@ Change log ## 1.1.1-dev (upcoming) -- TBD +- fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode ## 1.1.1 (2020-03-17) diff --git a/doc/README.md b/doc/README.md index 68ec69085..c2c4446f1 100644 --- a/doc/README.md +++ b/doc/README.md @@ -101,7 +101,7 @@ gridstack.js API - `removeTimeout` - time in milliseconds before widget is being removed while dragging outside of the grid. (default: `2000`) - `row` - fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. (default `0` no constrain) - `rtl` - if `true` turns grid to RTL. Possible values are `true`, `false`, `'auto'` (default: `'auto'`) See [example](http://gridstackjs.com/demo/rtl.html) -- `staticGrid` - makes grid static (default `false`). If true widgets are not movable/resizable. You don't even need jQueryUI draggable/resizable. A CSS class `grid-stack-static` is also added to the container. +- `staticGrid` - removes drag&drop&resize (default `false`). If `true` widgets are not movable/resizable by the user, but code can still move and oneColumnMode will still work. You don't even need jQueryUI draggable/resizable. A CSS class `grid-stack-static` is also added to the container. - `verticalMargin` - vertical gap size (default: `20`). Can be: * an integer (px) * a string (ex: '2em', '20px', '2rem') diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index b8762e65b..12f3d3968 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -145,6 +145,7 @@ describe('gridstack', function() { staticGrid: true }; var grid = GridStack.init(options); + expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); $('.grid-stack').removeClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); @@ -156,6 +157,7 @@ describe('gridstack', function() { staticGrid: false }; var grid = GridStack.init(options); + expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); $('.grid-stack').addClass('grid-stack-static'); grid._setStaticClass(); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index 43c4d455a..e7a37e1a6 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -624,9 +624,10 @@ interface GridstackOptions { rtl ? : boolean | 'auto'; /** - * makes grid static (default?: false). If `true` widgets are not movable/resizable. - * You don't even need draggable/resizable. A CSS class - * 'grid-stack-static' is also added to the element. + * removes drag&drop&resize (default `false`). + * If `true` widgets are not movable/resizable by the user, but code can still move and oneColumnMode will still work. + * You don't even need jQueryUI draggable/resizable. + * A CSS class `grid-stack-static` is also added to the container. */ staticGrid ? : boolean; diff --git a/src/gridstack.js b/src/gridstack.js index 69e91fb4a..3da687c95 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -867,14 +867,12 @@ self._updateHeightsOnResize(); } - if (self.opts.staticGrid) { return; } - if (!self.opts.disableOneColumnMode && (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= self.opts.minWidth) { - if (self.oneColumnMode) { return; } + if (self.oneColumnMode) { return } self.oneColumnMode = true; self.column(1); } else { - if (!self.oneColumnMode) { return; } + if (!self.oneColumnMode) { return } self.oneColumnMode = false; self.column(self._prevColumn); } From 79667a6588ed5f39bacc26145dc622f87d5094d2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 20 Mar 2020 09:13:30 -0700 Subject: [PATCH 0194/1298] TS: return sig cleanup, bug fix * all methods now return at least `this` so they can be chainable if they don't return something specific * `staticGrid` no longer disable oneColumnMode --- spec/gridstack-spec.js | 4 +- src/gridstack-engine.ts | 88 +++++++++++-------- src/gridstack.ts | 182 ++++++++++++++++++++++++---------------- 3 files changed, 162 insertions(+), 112 deletions(-) diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index c734d1a5d..33ccd79ee 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -886,7 +886,7 @@ describe('gridstack', function() { let grid = GridStack.init(options); grid.destroy(); expect($('.grid-stack').length).toBe(0); - expect(grid.engine).toBe(null); + expect(grid.engine).toBe(undefined); }); it('should cleanup gridstack but leave elements', function() { let options = { @@ -897,7 +897,7 @@ describe('gridstack', function() { grid.destroy(false); expect($('.grid-stack').length).toBe(1); expect($('.grid-stack-item').length).toBe(2); - expect(grid.engine).toBe(null); + expect(grid.engine).toBe(undefined); grid.destroy(); }); }); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index f6a6cf6ae..38f71ced4 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -44,23 +44,25 @@ export class GridStackEngine { this.nodes = nodes; } - public batchUpdate() { - if (this.batchMode) return; + public batchUpdate(): GridStackEngine { + if (this.batchMode) return this; this.batchMode = true; this._prevFloat = this._float; this._float = true; // let things go anywhere for now... commit() will restore and possibly reposition + return this; } - public commit() { - if (!this.batchMode) return; + public commit(): GridStackEngine { + if (!this.batchMode) return this; this.batchMode = false; this._float = this._prevFloat; delete this._prevFloat; this._packNodes(); this._notify(); + return this; } - private _fixCollisions(node: GridStackNode) { + private _fixCollisions(node: GridStackNode): GridStackEngine { this._sortNodes(-1); let nn = node; @@ -70,7 +72,7 @@ export class GridStackEngine { } while (true) { let collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn}); - if (!collisionNode) { return; } + if (!collisionNode) { return this } let moved; if (collisionNode.locked) { // if colliding with a locked item, move ourself instead @@ -80,11 +82,11 @@ export class GridStackEngine { moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height, collisionNode.width, collisionNode.height, true); } - if (!moved) { return; } // break inf loop if we couldn't move after all (ex: maxRow, fixed) + if (!moved) { return this } // break inf loop if we couldn't move after all (ex: maxRow, fixed) } } - public isAreaEmpty(x: number, y: number, width: number, height: number) { + public isAreaEmpty(x: number, y: number, width: number, height: number): boolean { let nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1}; let collisionNode = this.nodes.find(n => { return Utils.isIntercepted(n, nn); @@ -93,8 +95,8 @@ export class GridStackEngine { } /** re-layout grid items to reclaim any empty space */ - public compact() { - if (this.nodes.length === 0) { return; } + public compact(): GridStackEngine { + if (this.nodes.length === 0) { return this } this.batchUpdate(); this._sortNodes(); let copyNodes = this.nodes; @@ -107,6 +109,7 @@ export class GridStackEngine { node._dirty = true; // force attr update }); this.commit(); + return this; } /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */ @@ -122,17 +125,18 @@ export class GridStackEngine { /** float getter method */ public get float(): boolean { return this._float || false; } - private _sortNodes(dir?: -1 | 1) { + private _sortNodes(dir?: -1 | 1): GridStackEngine { this.nodes = Utils.sort(this.nodes, dir, this.column); + return this; } - private _packNodes() { + private _packNodes(): GridStackEngine { this._sortNodes(); if (this.float) { this.nodes.forEach((n, i) => { if (n._updating || n._packY === undefined || n.y === n._packY) { - return; + return this; } let newY = n.y; while (newY >= n._packY) { @@ -149,7 +153,7 @@ export class GridStackEngine { }); } else { this.nodes.forEach((n, i) => { - if (n.locked) { return; } + if (n.locked) { return this } while (n.y > 0) { let newY = n.y - 1; let canBeMoved = i === 0; @@ -170,6 +174,7 @@ export class GridStackEngine { } }); } + return this; } /** @@ -177,7 +182,7 @@ export class GridStackEngine { * @param node to adjust * @param resizing if out of bound, resize down or move into the grid to fit ? */ - public prepareNode(node: GridStackNode, resizing?: boolean) { + public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode { node = node || {}; // if we're missing position, have the grid position us automatically (before we set them to 0,0) if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) { @@ -240,7 +245,7 @@ export class GridStackEngine { return node; } - public getDirtyNodes(verify?: boolean) { + public getDirtyNodes(verify?: boolean): GridStackNode[] { // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state if (verify) { let dirtNodes = []; @@ -259,22 +264,24 @@ export class GridStackEngine { return this.nodes.filter(n => n._dirty); } - private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean) { - if (this.batchMode) { return; } + private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean): GridStackEngine { + if (this.batchMode) { return this } detachNode = (detachNode === undefined ? true : detachNode); nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) ); let dirtyNodes = nodes.concat(this.getDirtyNodes()); if (this.onchange) { this.onchange(dirtyNodes, detachNode); } + return this; } - public cleanNodes() { - if (this.batchMode) { return; } + public cleanNodes(): GridStackEngine { + if (this.batchMode) { return this } this.nodes.forEach(n => { delete n._dirty; }); + return this; } - public addNode(node: GridStackNode, triggerAddEvent?: boolean) { + public addNode(node: GridStackNode, triggerAddEvent?: boolean): GridStackNode { node = this.prepareNode(node); node._id = node._id || GridStackEngine._idSeq++; @@ -309,23 +316,25 @@ export class GridStackEngine { return node; } - public removeNode(node: GridStackNode, detachNode?: boolean) { + public removeNode(node: GridStackNode, detachNode?: boolean): GridStackEngine { detachNode = (detachNode === undefined ? true : detachNode); this.removedNodes.push(node); node._id = null; // hint that node is being removed this.nodes = this.nodes.filter(n => n !== node); this._packNodes(); this._notify(node, detachNode); + return this; } - public removeAll(detachNode?: boolean) { + public removeAll(detachNode?: boolean): GridStackEngine { delete this._layouts; - if (this.nodes.length === 0) { return; } + if (this.nodes.length === 0) { return this } detachNode = (detachNode === undefined ? true : detachNode); this.nodes.forEach(n => { n._id = null; }); // hint that node is being removed this.removedNodes = this.nodes; this.nodes = []; this._notify(this.removedNodes, detachNode); + return this; } public canMoveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number): boolean { @@ -369,7 +378,7 @@ export class GridStackEngine { return canMove; } - public canBePlacedWithRespectToHeight(node: GridStackNode) { + public canBePlacedWithRespectToHeight(node: GridStackNode): boolean { if (!this.maxRow) { return true; } @@ -384,7 +393,7 @@ export class GridStackEngine { return clone.getRow() <= this.maxRow; } - public isNodeChangedPosition(node: GridStackNode, x: number, y: number, width: number, height: number) { + public isNodeChangedPosition(node: GridStackNode, x: number, y: number, width: number, height: number): boolean { if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof width !== 'number') { width = node.width; } @@ -436,26 +445,28 @@ export class GridStackEngine { return this.nodes.reduce((memo, n) => Math.max(memo, n.y + n.height), 0); } - public beginUpdate(node: GridStackNode) { - if (node._updating) return; + public beginUpdate(node: GridStackNode): GridStackEngine { + if (node._updating) return this; node._updating = true; this.nodes.forEach(n => { n._packY = n.y; }); + return this; } - public endUpdate() { + public endUpdate(): GridStackEngine { let n = this.nodes.find(n => n._updating); if (n) { n._updating = false; this.nodes.forEach(n => { delete n._packY; }); } + return this; } /** @internal called whenever a node is added or moved - updates the cached layouts */ - public layoutsNodesChange(nodes: GridStackNode[]) { - if (!this._layouts || this._ignoreLayoutsNodeChange) return; + public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine { + if (!this._layouts || this._ignoreLayoutsNodeChange) return this; // remove smaller layouts - we will re-generate those on the fly... larger ones need to update this._layouts.forEach((layout, column) => { - if (!layout || column === this.column) return; + if (!layout || column === this.column) return this; if (column < this.column) { this._layouts[column] = undefined; } @@ -464,7 +475,7 @@ export class GridStackEngine { // Note: we don't need to check against out of bound scaling/moving as that will be done when using those cache values. nodes.forEach(node => { let n = layout.find(l => l._id === node._id); - if (!n) return; // no cache for new nodes. Will use those values. + if (!n) return this; // no cache for new nodes. Will use those values. let ratio = column / this.column; // Y changed, push down same amount // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode) @@ -483,6 +494,7 @@ export class GridStackEngine { }); } }); + return this; } /** @@ -494,8 +506,8 @@ export class GridStackEngine { * @param column new column number * @param nodes different sorted list (ex: DOM order) instead of current list */ - public updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[]) { - if (!this.nodes.length || oldColumn === column) { return; } + public updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[]): GridStackEngine { + if (!this.nodes.length || oldColumn === column) { return this } // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data let copy: Layout[] = []; @@ -554,7 +566,7 @@ export class GridStackEngine { // ...and add any extra non-cached ones let ratio = column / oldColumn; nodes.forEach(node => { - if (!node) return; + if (!node) return this; node.x = (column === 1 ? 0 : Math.round(node.x * ratio)); node.width = ((column === 1 || oldColumn === 1) ? 1 : (Math.round(node.width * ratio) || 1)); newNodes.push(node); @@ -571,10 +583,11 @@ export class GridStackEngine { }, this); this.commit(); delete this._ignoreLayoutsNodeChange; + return this; } /** @internal called to save initial position/size */ - public saveInitial() { + public saveInitial(): GridStackEngine { this.nodes.forEach(n => { n._origX = n.x; n._origY = n.y; @@ -582,6 +595,7 @@ export class GridStackEngine { n._origH = n.height; delete n._dirty; }); + return this; } // legacy method renames diff --git a/src/gridstack.ts b/src/gridstack.ts index 8384cbe8a..95f17c9c3 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -388,8 +388,9 @@ export class GridStack { /** * Initializes batch updates. You will see no changes until `commit()` method is called. */ - public batchUpdate() { + public batchUpdate(): GridStack { this.engine.batchUpdate(); + return this; } /** @@ -418,10 +419,10 @@ export class GridStack { * @example * grid.cellHeight(grid.cellWidth() * 1.2); */ - public cellHeight(val: numberOrString, noUpdate?: boolean) { + public cellHeight(val: numberOrString, noUpdate?: boolean): GridStack { let heightData = Utils.parseHeight(val); if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { - return ; + return this; } this.opts.cellHeightUnit = heightData.unit; this.opts.cellHeight = heightData.height; @@ -429,6 +430,7 @@ export class GridStack { if (!noUpdate) { this._updateStyles(); } + return this; } /** @@ -442,17 +444,19 @@ export class GridStack { /** * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate. */ - public commit() { + public commit(): GridStack { this.engine.commit(); this._triggerRemoveEvent(); this._triggerAddEvent(); this._triggerChangeEvent(); + return this; }; /** re-layout grid items to reclaim any empty space */ - public compact() { + public compact(): GridStack { this.engine.compact(); this._triggerChangeEvent(); + return this; } /** @@ -463,8 +467,8 @@ export class GridStack { * @param column - Integer > 0 (default 12). * @param doNotPropagate if true existing widgets will not be updated (optional) */ - public column(column: number, doNotPropagate?: boolean) { - if (this.opts.column === column) { return; } + public column(column: number, doNotPropagate?: boolean): GridStack { + if (this.opts.column === column) { return this; } let oldColumn = this.opts.column; // if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on) @@ -479,7 +483,7 @@ export class GridStack { this.el.classList.add('grid-stack-' + column); this.opts.column = this.engine.column = column; - if (doNotPropagate === true) { return; } + if (doNotPropagate === true) { return this; } // update the items now - see if the dom order nodes should be passed instead (else default to current list) let domNodes: GridStackNode[] = undefined; // explicitly leave not defined @@ -494,6 +498,7 @@ export class GridStack { // and trigger our event last... this._triggerChangeEvent(true); // skip layout update + return this; } /** @@ -513,7 +518,7 @@ export class GridStack { * Destroys a grid instance. * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). */ - public destroy(detachGrid = true) { + public destroy(detachGrid = true): GridStack { $(window).off('resize', this._onResizeHandler); this.disable(); if (!detachGrid) { @@ -524,9 +529,8 @@ export class GridStack { this.el.parentNode.removeChild(this.el); } Utils.removeStylesheet(this._stylesId); - if (this.engine) { - this.engine = null; - } + delete this.engine; + return this; } /** @@ -535,10 +539,11 @@ export class GridStack { * grid.enableMove(false); * grid.enableResize(false); */ - public disable() { + public disable(): GridStack { this.enableMove(false); this.enableResize(false); this._triggerEvent('disable'); + return this; } /** @@ -547,10 +552,11 @@ export class GridStack { * grid.enableMove(true); * grid.enableResize(true); */ - public enable() { + public enable(): GridStack { this.enableMove(true); this.enableResize(true); this._triggerEvent('enable'); + return this; } /** @@ -560,11 +566,12 @@ export class GridStack { * @param includeNewWidgets will force new widgets to be draggable as per * doEnable`s value by changing the disableDrag grid option (default: true). */ - public enableMove(doEnable: boolean, includeNewWidgets = true) { + public enableMove(doEnable: boolean, includeNewWidgets = true): GridStack { this.getGridItems().forEach(el => this.movable(el, doEnable)); if (includeNewWidgets) { this.opts.disableDrag = !doEnable; } + return this; } /** @@ -573,24 +580,28 @@ export class GridStack { * @param includeNewWidgets will force new widgets to be draggable as per * doEnable`s value by changing the disableResize grid option (default: true). */ - public enableResize(doEnable: boolean, includeNewWidgets = true) { + public enableResize(doEnable: boolean, includeNewWidgets = true): GridStack { this.getGridItems().forEach(el => this.resizable(el, doEnable)); if (includeNewWidgets) { this.opts.disableResize = !doEnable; } + return this; } /** * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */ - public float(val: boolean) { + public float(val: boolean): GridStack { + /* if (val === undefined) { // TODO: should we support and/or change signature ? figure this soon... console.warn('gridstack.ts: getter `float()` is deprecated in 2.x and has been replaced by `getFloat()`. It will be **completely** removed soon'); return this.getFloat(); } + */ this.engine.float = val; this._triggerChangeEvent(); + return this; } /** @@ -672,7 +683,6 @@ export class GridStack { this._updateContainerHeight(); this._triggerAddEvent(); this._triggerChangeEvent(); - return el; } @@ -684,7 +694,7 @@ export class GridStack { public maxWidth(els: GridStackElement, val: number): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return } node.maxWidth = (val || undefined); if (val) { el.setAttribute('data-gs-max-width', String(val)); @@ -703,7 +713,7 @@ export class GridStack { public minWidth(els: GridStackElement, val: number): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return } if (val) { el.setAttribute('data-gs-min-width', String(val)); } else { @@ -721,7 +731,7 @@ export class GridStack { public maxHeight(els: GridStackElement, val: number): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return } if (val) { el.setAttribute('data-gs-max-height', String(val)); } else { @@ -739,7 +749,7 @@ export class GridStack { public minHeight(els: GridStackElement, val: number): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return } if (val) { el.setAttribute('data-gs-min-height', String(val)); } else { @@ -757,7 +767,7 @@ export class GridStack { public movable(els: GridStackElement, val: boolean): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return } node.noMove = !(val || false); if (node.noMove) { this.dd.draggable(el, 'disable'); @@ -776,13 +786,14 @@ export class GridStack { * @param x new position x. If value is null or undefined it will be ignored. * @param y new position y. If value is null or undefined it will be ignored. */ - public move(els: GridStackElement, x?: number, y?: number) { + public move(els: GridStackElement, x?: number, y?: number): GridStack { this._updateElement(els, (el, node) => { x = (x !== undefined) ? x : node.x; y = (y !== undefined) ? y : node.y; this.engine.moveNode(node, x, y, node.width, node.height); }); + return this; } /** @@ -802,12 +813,12 @@ export class GridStack { * */ // eslint-disable-next-line @typescript-eslint/no-explicit-any - public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Record, arg3?: Record) => void) { + public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Record, arg3?: Record) => void): GridStack { // check for array of names being passed instead if (eventName.indexOf(' ') !== -1) { let names = eventName.split(' ') as GridStackEvent[]; names.forEach(name => this.on(name, callback)); - return; + return this; } if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { @@ -824,18 +835,19 @@ export class GridStack { // eslint-disable-next-line @typescript-eslint/no-explicit-any this.$el.on(eventName as any, callback); // still JQuery events } + return this; } /** * unsubscribe from the 'on' event below * @param eventName of the event (see possible values) */ - public off(eventName: GridStackEvent) { + public off(eventName: GridStackEvent): GridStack { // check for array of names being passed instead if (eventName.indexOf(' ') !== -1) { let names = eventName.split(' ') as GridStackEvent[]; names.forEach(name => this.off(name)); - return; + return this; } if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { @@ -848,6 +860,7 @@ export class GridStack { // still JQuery events this.$el.off(eventName); } + return this; } /** @@ -855,7 +868,7 @@ export class GridStack { * @param el widget or selector to modify * @param detachNode if false DOM node won't be removed from the tree (Default? true). */ - public removeWidget(els: GridStackElement, detachNode?: boolean) { + public removeWidget(els: GridStackElement, detachNode?: boolean): GridStack { getElements(els).forEach(el => { let node = el.gridstackNode; // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 @@ -872,13 +885,14 @@ export class GridStack { }); this._triggerRemoveEvent(); this._triggerChangeEvent(); + return this; } /** * Removes all widgets from the grid. * @param detachNode if false DOM nodes won't be removed from the tree (Default? true). */ - public removeAll(detachNode?: boolean) { + public removeAll(detachNode?: boolean): GridStack { // always remove our DOM data (circular link) before list gets emptied and drag&drop permanently this.engine.nodes.forEach(n => { delete n.el.gridstackNode; @@ -886,6 +900,7 @@ export class GridStack { }); this.engine.removeAll(detachNode); this._triggerRemoveEvent(); + return this; } /** @@ -894,13 +909,14 @@ export class GridStack { * @param width new dimensions width. If value is null or undefined it will be ignored. * @param height new dimensions height. If value is null or undefined it will be ignored. */ - public resize(els: GridStackElement, width?: number, height?: number) { + public resize(els: GridStackElement, width?: number, height?: number): GridStack { this._updateElement(els, (el, node) => { width = (width || node.width); height = (height || node.height); this.engine.moveNode(node, node.x, node.y, width, height); }); + return this; } /** @@ -926,23 +942,25 @@ export class GridStack { * Toggle the grid animation state. Toggles the `grid-stack-animate` class. * @param doAnimate if true the grid will animate. */ - public setAnimation(doAnimate: boolean) { + public setAnimation(doAnimate: boolean): GridStack { if (doAnimate) { this.el.classList.add('grid-stack-animate'); } else { this.el.classList.remove('grid-stack-animate'); } + return this; } /** * Toggle the grid static state. Also toggle the grid-stack-static class. * @param staticValue if true the grid become static. */ - public setStatic(staticValue: boolean) { + public setStatic(staticValue: boolean): GridStack { this.opts.staticGrid = (staticValue === true); this.enableMove(!staticValue); this.enableResize(!staticValue); this._setStaticClass(); + return this; } /** @@ -953,7 +971,7 @@ export class GridStack { * @param width new dimensions width. If value is null or undefined it will be ignored. * @param height new dimensions height. If value is null or undefined it will be ignored. */ - public update(els: GridStackElement, x?: number, y?: number, width?: number, height?: number) { + public update(els: GridStackElement, x?: number, y?: number, width?: number, height?: number): GridStack { this._updateElement(els, (el, node) => { x = (x !== undefined) ? x : node.x; y = (y !== undefined) ? y : node.y; @@ -962,6 +980,7 @@ export class GridStack { this.engine.moveNode(node, x, y, width, height); }); + return this; } /** @@ -970,11 +989,11 @@ export class GridStack { * @param value new vertical margin value * @param noUpdate (optional) if true, styles will not be updated */ - public verticalMargin(value: numberOrString, noUpdate?: boolean) { + public verticalMargin(value: numberOrString, noUpdate?: boolean): GridStack { let heightData = Utils.parseHeight(value); if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) { - return ; + return this; } this.opts.verticalMarginUnit = heightData.unit; this.opts.verticalMargin = heightData.height; @@ -982,6 +1001,7 @@ export class GridStack { if (!noUpdate) { this._updateStyles(); } + return this; } /** returns current vertical margin value */ @@ -1008,8 +1028,8 @@ export class GridStack { return this.engine.canBePlacedWithRespectToHeight({x, y, width, height, autoPosition}); } - private _triggerChangeEvent(skipLayoutChange?: boolean) { - if (this.engine.batchMode) { return; } + private _triggerChangeEvent(skipLayoutChange?: boolean): GridStack { + if (this.engine.batchMode) { return this; } let elements = this.engine.getDirtyNodes(true); // verify they really changed if (elements && elements.length) { if (!skipLayoutChange) { @@ -1018,10 +1038,11 @@ export class GridStack { this._triggerEvent('change', elements); } this.engine.saveInitial(); // we called, now reset initial values & dirty flags + return this; } - private _triggerAddEvent() { - if (this.engine.batchMode) { return; } + private _triggerAddEvent(): GridStack { + if (this.engine.batchMode) { return this } if (this.engine.addedNodes && this.engine.addedNodes.length > 0) { this.engine.layoutsNodesChange(this.engine.addedNodes); // prevent added nodes from also triggering 'change' event (which is called next) @@ -1029,23 +1050,26 @@ export class GridStack { this._triggerEvent('added', this.engine.addedNodes); this.engine.addedNodes = []; } + return this; } - private _triggerRemoveEvent() { - if (this.engine.batchMode) { return; } + private _triggerRemoveEvent(): GridStack { + if (this.engine.batchMode) { return this; } if (this.engine.removedNodes && this.engine.removedNodes.length > 0) { this._triggerEvent('removed', this.engine.removedNodes); this.engine.removedNodes = []; } + return this; } // eslint-disable-next-line @typescript-eslint/no-explicit-any - private _triggerEvent(name: string, data?: any) { + private _triggerEvent(name: string, data?: any): GridStack { let event = data ? new CustomEvent(name, {bubbles: false, detail: data}) : new Event(name); this.el.dispatchEvent(event); + return this; } - private _initStyles() { + private _initStyles(): GridStack { if (this._stylesId) { Utils.removeStylesheet(this._stylesId); } @@ -1056,11 +1080,12 @@ export class GridStack { if (this._styles !== null) { this._styles._max = 0; } + return this; } - private _updateStyles(maxHeight?: number) { + private _updateStyles(maxHeight?: number): GridStack { if (this._styles === null || this._styles === undefined) { - return; + return this; } let prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; @@ -1073,10 +1098,10 @@ export class GridStack { this._initStyles(); this._updateContainerHeight(); if (!this.opts.cellHeight) { // The rest will be handled by CSS - return ; + return this; } if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep it increasing - return ; + return this; } let height = this.opts.cellHeight as number; let margin = this.opts.verticalMargin as number; @@ -1124,10 +1149,11 @@ export class GridStack { } this._styles._max = maxHeight; } + return this; } - private _updateContainerHeight() { - if (this.engine.batchMode) { return; } + private _updateContainerHeight(): GridStack { + if (this.engine.batchMode) { return this; } let row = this.engine.getRow(); if (row < this.opts.minRow) { row = this.opts.minRow; @@ -1144,12 +1170,12 @@ export class GridStack { this.el.setAttribute('data-gs-current-row', String(row)); if (row === 0) { this.el.style.removeProperty('height'); - return; + return this; } let cellHeight = this.opts.cellHeight as number; let vMargin = this.opts.verticalMargin as number; let unit = this.opts.cellHeightUnit; - if (!cellHeight) { return } + if (!cellHeight) { return this } if (unit === this.opts.verticalMarginUnit) { this.el.style.height = (row * (cellHeight + vMargin) - vMargin) + unit; @@ -1157,28 +1183,31 @@ export class GridStack { this.el.style.height = 'calc(' + (row * cellHeight) + unit + ' + ' + (row * (vMargin - 1) + this.opts.verticalMarginUnit) + ')'; } + return this; } - private _setupRemovingTimeout(el: GridItemHTMLElement) { + private _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; - if (node._removeTimeout || !this.opts.removable) { return; } + if (node._removeTimeout || !this.opts.removable) { return this; } node._removeTimeout = setTimeout(() => { el.classList.add('grid-stack-item-removing'); node._isAboutToRemove = true; }, this.opts.removeTimeout); + return this; } - private _clearRemovingTimeout(el: GridItemHTMLElement) { + private _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; - if (!node._removeTimeout) { return; } + if (!node._removeTimeout) { return this; } clearTimeout(node._removeTimeout); node._removeTimeout = null; el.classList.remove('grid-stack-item-removing'); node._isAboutToRemove = false; + return this; } /** prepares the element for drag&drop **/ - private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode) { + private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode): GridStack { // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth; let cellFullHeight; // internal cellHeight + v-margin @@ -1358,9 +1387,10 @@ export class GridStack { } this._writeAttr(el, node); + return this; } - private _triggerNativeEvent(el: HTMLElement, selector: string, eventName: string) { + private _triggerNativeEvent(el: HTMLElement, selector: string, eventName: string): GridStack { let elements = el.querySelectorAll(selector); if (elements.length) { let event = document.createEvent('HTMLEvents'); @@ -1368,9 +1398,10 @@ export class GridStack { Array.from(elements).map(x => x.dispatchEvent(event)); } + return this; } - private _prepareElement(el: GridItemHTMLElement, triggerAddEvent?: boolean) { + private _prepareElement(el: GridItemHTMLElement, triggerAddEvent?: boolean): GridStack { triggerAddEvent = (triggerAddEvent !== undefined ? triggerAddEvent : false); el.classList.add(this.opts.itemClass); @@ -1379,19 +1410,21 @@ export class GridStack { el.gridstackNode = node; this._prepareElementsByNode(el, node); + return this; } /** call to write x,y,w,h attributes back to element */ - private _writeAttrs(el: HTMLElement, x?: number, y?: number, width?: number, height?: number) { + private _writeAttrs(el: HTMLElement, x?: number, y?: number, width?: number, height?: number): GridStack { if (x !== undefined && x !== null) { el.setAttribute('data-gs-x', String(x)); } if (y !== undefined && y !== null) { el.setAttribute('data-gs-y', String(y)); } if (width) { el.setAttribute('data-gs-width', String(width)); } if (height) { el.setAttribute('data-gs-height', String(height)); } + return this; } /** call to write any default attributes back to element */ - private _writeAttr(el: HTMLElement, node: GridstackWidget) { - if (!node) return; + private _writeAttr(el: HTMLElement, node: GridstackWidget): GridStack { + if (!node) return this; this._writeAttrs(el, node.x, node.y, node.width, node.height); if (node.autoPosition) { @@ -1424,6 +1457,7 @@ export class GridStack { if (node.resizeHandles) { el.setAttribute('data-gs-resize-handles', node.resizeHandles); } if (node.id) { el.setAttribute('data-gs-id', String(node.id)); } + return this; } /** call to write any default attributes back to element */ @@ -1446,11 +1480,11 @@ export class GridStack { return node; } - private _updateElement(els: GridStackElement, callback: (el: GridItemHTMLElement, node: GridStackNode) => void) { + private _updateElement(els: GridStackElement, callback: (el: GridItemHTMLElement, node: GridStackNode) => void): GridStack { let el = getElement(els); - if (!el) { return; } + if (!el) { return this; } let node = el.gridstackNode; - if (!node) { return; } + if (!node) { return this; } this.engine.cleanNodes(); this.engine.beginUpdate(node); @@ -1461,9 +1495,10 @@ export class GridStack { this._triggerChangeEvent(); this.engine.endUpdate(); + return this; } - private _setStaticClass() { + private _setStaticClass(): GridStack { let staticClassName = 'grid-stack-static'; if (this.opts.staticGrid === true) { @@ -1471,34 +1506,34 @@ export class GridStack { } else { this.el.classList.remove(staticClassName); } + return this; } /** * called when we are being resized - check if the one Column Mode needs to be turned on/off * and remember the prev columns we used. */ - private _onResizeHandler() { + private _onResizeHandler(): GridStack { if (this._isAutoCellHeight) { Utils.throttle(() => { this.cellHeight(this.cellWidth(), false)}, 100); } - if (this.opts.staticGrid) { return; } - if (!this.opts.disableOneColumnMode && (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= this.opts.minWidth) { - if (this._oneColumnMode) { return; } + if (this._oneColumnMode) { return this } this._oneColumnMode = true; this.column(1); } else { - if (!this._oneColumnMode) { return; } + if (!this._oneColumnMode) { return this } this._oneColumnMode = false; this.column(this._prevColumn); } + return this; } /** called to add drag over support to support widgets */ - private _setupAcceptWidget() { - if (this.opts.staticGrid || !this.opts.acceptWidgets) return; + private _setupAcceptWidget(): GridStack { + if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; // vars used by the function callback let draggingElement: GridItemHTMLElement; @@ -1645,6 +1680,7 @@ export class GridStack { this.$el.trigger('dropped', [originalNode, node]); return false; // prevent parent from receiving msg (which may be grid as well) }); + return this; } // legacy method renames From 91cc67fab59e16be43bbb9e787cd1add601e83bb Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 21 Mar 2020 12:39:52 -0700 Subject: [PATCH 0195/1298] TS: karma test and coverage of TS files --- karma.conf.js | 28 +- package.json | 9 +- ...ngine-spec.js => gridstack-engine-spec.ts} | 32 +- spec/{gridstack-spec.js => gridstack-spec.ts} | 20 +- spec/utils-spec.js | 124 ---- spec/utils-spec.ts | 124 ++++ yarn.lock | 539 +++--------------- 7 files changed, 235 insertions(+), 641 deletions(-) rename spec/{gridstack-engine-spec.js => gridstack-engine-spec.ts} (94%) rename spec/{gridstack-spec.js => gridstack-spec.ts} (99%) delete mode 100644 spec/utils-spec.js create mode 100644 spec/utils-spec.ts diff --git a/karma.conf.js b/karma.conf.js index a4b56b442..0ef02742a 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,45 +1,41 @@ // Karma configuration -// Generated on Thu Feb 18 2016 22:00:23 GMT+0100 (CET) module.exports = function(config) { config.set({ + karmaTypescriptConfig: { + compilerOptions: { + lib: ['dom', 'es6'], + } + }, // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', - // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['jasmine'], - + frameworks: ['jasmine', 'karma-typescript'], // list of files / patterns to load in the browser files: [ - 'dist/gridstack.all.js', - 'spec/*-spec.js', + 'src/*.ts', + 'spec/*-spec.ts', // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined ], - // list of files to exclude exclude: [ ], - // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - 'dist/gridstack-engine.js': ['coverage'], - 'dist/gridstack.js': ['coverage'], - 'dist/jqueryui-gridstack-dragdrop-plugin': ['coverage'], - 'dist/utils.js': ['coverage'] + "**/*.ts": ['karma-typescript'] }, - // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'coverage', 'coveralls'], + reporters: ['progress', 'karma-typescript'], coverageReporter: { type: 'lcov', // lcov or lcovonly are required for generating lcov.info files @@ -49,21 +45,17 @@ module.exports = function(config) { // web server port port: 9876, - // enable / disable colors in the output (reporters and logs) colors: true, - // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN // config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, - // enable / disable watching file and executing tests whenever any file changes autoWatch: true, - // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['ChromeHeadlessCustom'], diff --git a/package.json b/package.json index 9b5e77fa7..220b8fba0 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "url": "https://github.com/gridstack/gridstack.js/issues" }, "homepage": "http://gridstack.github.io/gridstack.js/", - "dependencies": {}, - "devDependencies": { + "dependencies": { + "@types/jasmine": "^3.5.9", "@types/jquery": "^3.3.33", "@types/jqueryui": "^1.12.10", "@typescript-eslint/eslint-plugin": "^2.23.0", @@ -66,10 +66,9 @@ "jasmine-core": "^3.5.0", "karma": "^4.4.1", "karma-chrome-launcher": "^3.1.0", - "karma-coverage": "^2.0.1", - "karma-coveralls": "^2.1.0", + "karma-cli": "^2.0.0", "karma-jasmine": "^3.1.1", - "karma-typescript": "^5.0.0", + "karma-typescript": "^5.0.1", "node-sass": "^4.13.1", "puppeteer": "^2.1.1", "serve-static": "^1.14.1", diff --git a/spec/gridstack-engine-spec.js b/spec/gridstack-engine-spec.ts similarity index 94% rename from spec/gridstack-engine-spec.js rename to spec/gridstack-engine-spec.ts index 947aea58c..56b01b04d 100644 --- a/spec/gridstack-engine-spec.js +++ b/spec/gridstack-engine-spec.ts @@ -1,8 +1,11 @@ +import { GridStackEngine } from '../src/gridstack-engine'; + describe('gridstack engine', function() { 'use strict'; let engine; - let e = GridStack.Engine; - let w = window; + // old hacky JS code that's not happy in TS. just cast to `any` and skip warnings + let e: any = GridStackEngine; + let w: any = window; let findNode = function(engine, id) { return engine.nodes.find(function(i) { return i._id === id; }); @@ -16,7 +19,7 @@ describe('gridstack engine', function() { describe('test constructor', function() { it('should be setup properly', function() { - engine = new GridStack.Engine(12); + engine = new GridStackEngine(12); expect(engine.column).toEqual(12); expect(engine.float).toEqual(false); expect(engine.maxRow).toEqual(0); @@ -27,8 +30,8 @@ describe('gridstack engine', function() { it('should set params correctly.', function() { let fkt = function() { }; - let arr = [1,2,3]; - engine = new GridStack.Engine(1, fkt, true, 2, arr); + let arr: any = [1,2,3]; + engine = new GridStackEngine(1, fkt, true, 2, arr); expect(engine.column).toEqual(1); expect(engine.float).toBe(true); expect(engine.maxRow).toEqual(2); @@ -51,7 +54,7 @@ describe('gridstack engine', function() { describe('test prepareNode', function() { beforeAll(function() { - engine = new GridStack.Engine(12); + engine = new GridStackEngine(12); }); it('should prepare a node', function() { expect(engine.prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, width: 1, height: 1})); @@ -120,7 +123,7 @@ describe('gridstack engine', function() { describe('test isAreaEmpty', function() { beforeAll(function() { - engine = new GridStack.Engine(12, null, true); + engine = new GridStackEngine(12, null, true); engine.nodes = [ engine.prepareNode({x: 3, y: 2, width: 3, height: 2}) ]; @@ -140,7 +143,7 @@ describe('gridstack engine', function() { describe('test cleanNodes/getDirtyNodes', function() { beforeAll(function() { - engine = new GridStack.Engine(12, null, true); + engine = new GridStackEngine(12, null, true); engine.nodes = [ engine.prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), engine.prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), @@ -173,7 +176,7 @@ describe('gridstack engine', function() { describe('test batchUpdate/commit', function() { beforeAll(function() { - engine = new GridStack.Engine(12); + engine = new GridStackEngine(12); }); it('should work on not float grids', function() { @@ -200,7 +203,7 @@ describe('gridstack engine', function() { describe('test batchUpdate/commit', function() { beforeAll(function() { - engine = new GridStack.Engine(12, null, true); + engine = new GridStackEngine(12, null, true); }); it('should work on float grids', function() { @@ -222,7 +225,7 @@ describe('gridstack engine', function() { callback: function() {} }; spyOn(spy, 'callback'); - engine = new GridStack.Engine(12, spy.callback, true); + engine = new GridStackEngine(12, spy.callback, true); engine.nodes = [ engine.prepareNode({x: 0, y: 0, width: 1, height: 1, idx: 1, _dirty: true}), engine.prepareNode({x: 3, y: 2, width: 3, height: 2, idx: 2, _dirty: true}), @@ -268,7 +271,7 @@ describe('gridstack engine', function() { describe('test _packNodes', function() { describe('using not float mode', function() { beforeEach(function() { - engine = new GridStack.Engine(12, null, false); + engine = new GridStackEngine(12, null, false); }); it('shouldn\'t pack one node with y coord eq 0', function() { @@ -323,7 +326,7 @@ describe('gridstack engine', function() { describe('test isNodeChangedPosition', function() { beforeAll(function() { - engine = new GridStack.Engine(12); + engine = new GridStackEngine(12); }); it('should return true for changed x', function() { let widget = { x: 1, y: 2, width: 3, height: 4 }; @@ -349,7 +352,7 @@ describe('gridstack engine', function() { describe('test locked widget', function() { beforeAll(function() { - engine = new GridStack.Engine(12); + engine = new GridStackEngine(12); }); it('should add widgets around locked one', function() { let nodes = [ @@ -374,5 +377,4 @@ describe('gridstack engine', function() { expect(engine.moveNode(node2, 7, 6)).toEqual(jasmine.objectContaining({x: 7, y: 6, width: 2, height: 3,})); }); }); - }); diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.ts similarity index 99% rename from spec/gridstack-spec.js rename to spec/gridstack-spec.ts index 79afec38e..4ed5931ff 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.ts @@ -1,3 +1,5 @@ +import { GridStack } from '../src/gridstack'; + describe('gridstack', function() { 'use strict'; @@ -67,7 +69,7 @@ describe('gridstack', function() { verticalMargin: 10, staticGrid: true }; - let grid = GridStack.init(options); + let grid: any = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(true); $('.grid-stack').removeClass('grid-stack-static'); grid._setStaticClass(); @@ -79,7 +81,7 @@ describe('gridstack', function() { verticalMargin: 10, staticGrid: false }; - let grid = GridStack.init(options); + let grid: any = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-static')).toBe(false); $('.grid-stack').addClass('grid-stack-static'); grid._setStaticClass(); @@ -826,7 +828,7 @@ describe('gridstack', function() { }); it('should use default', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''}); + let widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''} as any); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -862,7 +864,7 @@ describe('gridstack', function() { it('should match true/false only', function() { let grid = GridStack.init({float: true}); expect(grid.getFloat()).toBe(true); - grid.float(0); + (grid as any).float(0); expect(grid.getFloat()).toBe(false); grid.float(null); expect(grid.getFloat()).toBe(false); @@ -953,7 +955,7 @@ describe('gridstack', function() { document.body.removeChild(document.getElementById('gs-cont')); }); it('should do nothing and return NULL to mean nothing happened', function() { - let grid = GridStack.init(); + let grid:any = GridStack.init(); let items = $('.grid-stack-item'); grid._updateElement(items[0], function(el, node) { let hasMoved = grid.engine.moveNode(node); @@ -961,7 +963,7 @@ describe('gridstack', function() { }); }); it('should do nothing and return node', function() { - let grid = GridStack.init(); + let grid: any = GridStack.init(); let items = $('.grid-stack-item'); grid.minWidth(items[0], 1); grid.maxWidth(items[0], 2); @@ -1037,7 +1039,7 @@ describe('gridstack', function() { cellHeight: 80, verticalMargin: 10 }; - let grid = GridStack.init(options); + let grid: any = GridStack.init(options); spyOn(grid, '_updateStyles'); grid.verticalMargin(11, true); expect(grid._updateStyles).not.toHaveBeenCalled(); @@ -1309,13 +1311,13 @@ describe('gridstack', function() { }); */ it('warning if OLD grid height is set', function() { - let grid = GridStack.init({height: 10}); // old 0.5.2 Opt now maxRow + let grid = (GridStack as any).init({height: 10}); // old 0.5.2 Opt now maxRow expect(grid.opts.maxRow).toBe(10); expect(grid.engine.maxRow).toBe(10); expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `height` is deprecated in v0.5.3 and has been replaced with `maxRow`. It will be **completely** removed in v1.0'); }); it('warning if OLD oneColumnModeClass is set (no changes)', function() { - GridStack.init({oneColumnModeClass: 'foo'}); // deleted 0.6.3 Opt + (GridStack as any).init({oneColumnModeClass: 'foo'}); // deleted 0.6.3 Opt expect(console.warn).toHaveBeenCalledWith('gridstack.js: Option `oneColumnModeClass` is deprecated in v0.6.3. Use class `.grid-stack-1` instead'); }); }); diff --git a/spec/utils-spec.js b/spec/utils-spec.js deleted file mode 100644 index c134eb430..000000000 --- a/spec/utils-spec.js +++ /dev/null @@ -1,124 +0,0 @@ -describe('gridstack utils', function() { - 'use strict'; - - let utils; - - beforeEach(function() { - utils = GridStack.Utils; - }); - - describe('setup of utils', function() { - - it('should set gridstack utils.', function() { - expect(utils).not.toBeNull(); - expect(typeof utils).toBe('function'); - }); - - }); - - describe('test toBool', function() { - - it('should return booleans.', function() { - expect(utils.toBool(true)).toEqual(true); - expect(utils.toBool(false)).toEqual(false); - }); - - it('should work with integer.', function() { - expect(utils.toBool(1)).toEqual(true); - expect(utils.toBool(0)).toEqual(false); - }); - - it('should work with Strings.', function() { - expect(utils.toBool('')).toEqual(false); - expect(utils.toBool('0')).toEqual(false); - expect(utils.toBool('no')).toEqual(false); - expect(utils.toBool('false')).toEqual(false); - expect(utils.toBool('yes')).toEqual(true); - expect(utils.toBool('yadda')).toEqual(true); - }); - - }); - - describe('test isIntercepted', function() { - let src = {x: 3, y: 2, width: 3, height: 2}; - - it('should intercept.', function() { - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 4, height: 3})).toEqual(true); - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 40, height: 30})).toEqual(true); - expect(utils.isIntercepted(src, {x: 3, y: 2, width: 3, height: 2})).toEqual(true); - expect(utils.isIntercepted(src, {x: 5, y: 3, width: 3, height: 2})).toEqual(true); - }); - - it('shouldn\'t intercept.', function() { - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 3, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 0, y: 0, width: 13, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 1, y: 4, width: 13, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 0, y: 3, width: 3, height: 2})).toEqual(false); - expect(utils.isIntercepted(src, {x: 6, y: 3, width: 3, height: 2})).toEqual(false); - }); - }); - - describe('test createStylesheet/removeStylesheet', function() { - - it('should create/remove style DOM', function() { - let _id = 'test-123'; - - utils.createStylesheet(_id); - - let style = $('STYLE[data-gs-style-id=' + _id + ']'); - - expect(style.length).toEqual(1); - expect(style.prop('tagName')).toEqual('STYLE'); - - utils.removeStylesheet(_id) - - style = $('STYLE[data-gs-style-id=' + _id + ']'); - - expect(style.length).toEqual(0); - }); - - }); - - describe('test parseHeight', function() { - - it('should parse height value', function() { - expect(utils.parseHeight(12)).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); - expect(utils.parseHeight('12px')).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); - expect(utils.parseHeight('12.3px')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'px'})); - expect(utils.parseHeight('12.3em')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'em'})); - expect(utils.parseHeight('12.3rem')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'rem'})); - expect(utils.parseHeight('12.3vh')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vh'})); - expect(utils.parseHeight('12.3vw')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vw'})); - expect(utils.parseHeight('12.3%')).toEqual(jasmine.objectContaining({height: 12.3, unit: '%'})); - expect(utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({height: 12.5, unit: 'px'})); - expect(function() { utils.parseHeight('12.5 df'); }).toThrowError('Invalid height'); - - }); - - it('should parse negative height value', function() { - expect(utils.parseHeight(-12)).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); - expect(utils.parseHeight('-12px')).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); - expect(utils.parseHeight('-12.3px')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'px'})); - expect(utils.parseHeight('-12.3em')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'em'})); - expect(utils.parseHeight('-12.3rem')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'rem'})); - expect(utils.parseHeight('-12.3vh')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vh'})); - expect(utils.parseHeight('-12.3vw')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vw'})); - expect(utils.parseHeight('-12.3%')).toEqual(jasmine.objectContaining({height: -12.3, unit: '%'})); - expect(utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({height: -12.5, unit: 'px'})); - expect(function() { utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); - }); - }); - - describe('test defaults', function() { - it('should assign missing field or undefined', function() { - let src = {}; - expect(src).toEqual({}); - expect(utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); - expect(utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); - src.width = undefined; - expect(src).toEqual({x: 1, y: 2, width: undefined}); - expect(utils.defaults(src, {x: 10, width: 3})).toEqual({x: 1, y: 2, width: 3}); - expect(utils.defaults(src, {height: undefined})).toEqual({x: 1, y: 2, width: 3, height: undefined}); - }); - }); -}); diff --git a/spec/utils-spec.ts b/spec/utils-spec.ts new file mode 100644 index 000000000..a522cc377 --- /dev/null +++ b/spec/utils-spec.ts @@ -0,0 +1,124 @@ +import { Utils } from '../src/utils'; + +describe('gridstack utils', function() { + 'use strict'; + + beforeEach(function() { + }); + + describe('setup of utils', function() { + + it('should set gridstack Utils.', function() { + let utils = Utils; + expect(utils).not.toBeNull(); + expect(typeof utils).toBe('function'); + }); + + }); + + describe('test toBool', function() { + + it('should return booleans.', function() { + expect(Utils.toBool(true)).toEqual(true); + expect(Utils.toBool(false)).toEqual(false); + }); + + it('should work with integer.', function() { + expect(Utils.toBool(1)).toEqual(true); + expect(Utils.toBool(0)).toEqual(false); + }); + + it('should work with Strings.', function() { + expect(Utils.toBool('')).toEqual(false); + expect(Utils.toBool('0')).toEqual(false); + expect(Utils.toBool('no')).toEqual(false); + expect(Utils.toBool('false')).toEqual(false); + expect(Utils.toBool('yes')).toEqual(true); + expect(Utils.toBool('yadda')).toEqual(true); + }); + + }); + + describe('test isIntercepted', function() { + let src = {x: 3, y: 2, width: 3, height: 2}; + + it('should intercept.', function() { + expect(Utils.isIntercepted(src, {x: 0, y: 0, width: 4, height: 3})).toEqual(true); + expect(Utils.isIntercepted(src, {x: 0, y: 0, width: 40, height: 30})).toEqual(true); + expect(Utils.isIntercepted(src, {x: 3, y: 2, width: 3, height: 2})).toEqual(true); + expect(Utils.isIntercepted(src, {x: 5, y: 3, width: 3, height: 2})).toEqual(true); + }); + + it('shouldn\'t intercept.', function() { + expect(Utils.isIntercepted(src, {x: 0, y: 0, width: 3, height: 2})).toEqual(false); + expect(Utils.isIntercepted(src, {x: 0, y: 0, width: 13, height: 2})).toEqual(false); + expect(Utils.isIntercepted(src, {x: 1, y: 4, width: 13, height: 2})).toEqual(false); + expect(Utils.isIntercepted(src, {x: 0, y: 3, width: 3, height: 2})).toEqual(false); + expect(Utils.isIntercepted(src, {x: 6, y: 3, width: 3, height: 2})).toEqual(false); + }); + }); + + describe('test createStylesheet/removeStylesheet', function() { + + it('should create/remove style DOM', function() { + let _id = 'test-123'; + + Utils.createStylesheet(_id); + + let style = $('STYLE[data-gs-style-id=' + _id + ']'); + + expect(style.length).toEqual(1); + expect(style.prop('tagName')).toEqual('STYLE'); + + Utils.removeStylesheet(_id) + + style = $('STYLE[data-gs-style-id=' + _id + ']'); + + expect(style.length).toEqual(0); + }); + + }); + + describe('test parseHeight', function() { + + it('should parse height value', function() { + expect(Utils.parseHeight(12)).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); + expect(Utils.parseHeight('12px')).toEqual(jasmine.objectContaining({height: 12, unit: 'px'})); + expect(Utils.parseHeight('12.3px')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'px'})); + expect(Utils.parseHeight('12.3em')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'em'})); + expect(Utils.parseHeight('12.3rem')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'rem'})); + expect(Utils.parseHeight('12.3vh')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vh'})); + expect(Utils.parseHeight('12.3vw')).toEqual(jasmine.objectContaining({height: 12.3, unit: 'vw'})); + expect(Utils.parseHeight('12.3%')).toEqual(jasmine.objectContaining({height: 12.3, unit: '%'})); + expect(Utils.parseHeight('12.5')).toEqual(jasmine.objectContaining({height: 12.5, unit: 'px'})); + expect(function() { Utils.parseHeight('12.5 df'); }).toThrowError('Invalid height'); + + }); + + it('should parse negative height value', function() { + expect(Utils.parseHeight(-12)).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); + expect(Utils.parseHeight('-12px')).toEqual(jasmine.objectContaining({height: -12, unit: 'px'})); + expect(Utils.parseHeight('-12.3px')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'px'})); + expect(Utils.parseHeight('-12.3em')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'em'})); + expect(Utils.parseHeight('-12.3rem')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'rem'})); + expect(Utils.parseHeight('-12.3vh')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vh'})); + expect(Utils.parseHeight('-12.3vw')).toEqual(jasmine.objectContaining({height: -12.3, unit: 'vw'})); + expect(Utils.parseHeight('-12.3%')).toEqual(jasmine.objectContaining({height: -12.3, unit: '%'})); + expect(Utils.parseHeight('-12.5')).toEqual(jasmine.objectContaining({height: -12.5, unit: 'px'})); + expect(function() { Utils.parseHeight('-12.5 df'); }).toThrowError('Invalid height'); + }); + }); + + describe('test defaults', function() { + it('should assign missing field or undefined', function() { + let src: any = {}; + expect(src).toEqual({}); + expect(Utils.defaults(src, {x: 1, y: 2})).toEqual({x: 1, y: 2}); + expect(Utils.defaults(src, {x: 10})).toEqual({x: 1, y: 2}); + src.width = undefined; + expect(src).toEqual({x: 1, y: 2, width: undefined}); + expect(Utils.defaults(src, {x: 10, width: 3})).toEqual({x: 1, y: 2, width: 3}); + expect(Utils.defaults(src, {height: undefined})).toEqual({x: 1, y: 2, width: 3, height: undefined}); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 5adff9846..65d48c8f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,16 +30,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== - dependencies: - "@babel/types" "^7.8.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - "@babel/generator@^7.8.6", "@babel/generator@^7.8.7": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" @@ -91,24 +81,15 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.4.3", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== - "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": version "7.8.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== -"@babel/template@^7.4.0", "@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" +"@babel/parser@^7.8.3": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" + integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== "@babel/template@^7.7.4", "@babel/template@^7.8.6": version "7.8.6" @@ -119,20 +100,14 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.4.3": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/template@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" + integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" + "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": version "7.8.6" @@ -149,7 +124,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.4.0", "@babel/types@^7.8.3": +"@babel/types@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== @@ -195,6 +170,11 @@ resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== +"@types/jasmine@^3.5.9": + version "3.5.9" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.9.tgz#43ca4566f0d9de23df1211ecf32a9b9f8c3a5923" + integrity sha512-KNL2Fq6GRmty2j6+ZmueT/Z/dkctLNH+5DFoGHNDtcgt7yME9NZd8x2p81Yuea1Xux/qAryDd3zVLUoKpDz1TA== + "@types/jquery@*", "@types/jquery@^3.3.33": version "3.3.33" resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9" @@ -438,11 +418,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - accepts@~1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -580,13 +555,6 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -735,11 +703,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.6.0, async@^2.6.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -752,6 +715,11 @@ async@^3.0.1: resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== +async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1045,11 +1013,6 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -1312,35 +1275,11 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -1488,7 +1427,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.5.0, convert-source-map@^1.7.0: +convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -1532,7 +1471,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -coveralls@^3.0.9, coveralls@~3.0.0: +coveralls@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.9.tgz#8cfc5a5525f84884e2948a0bf0f1c0e90aac0420" integrity sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg== @@ -1644,7 +1583,7 @@ date-format@^3.0.0: resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== -dateformat@^1.0.6, dateformat@~1.0.12: +dateformat@~1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= @@ -1702,7 +1641,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2067,18 +2006,6 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2159,11 +2086,6 @@ espree@^6.1.2: acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2183,11 +2105,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -2516,7 +2433,7 @@ flatted@^2.0.0, flatted@^2.0.1: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== -flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: +flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== @@ -2600,14 +2517,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -2646,11 +2555,6 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -2736,33 +2640,6 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob@^5.0.15, glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -2775,6 +2652,17 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.0" +glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~7.0.0: version "7.0.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" @@ -2856,7 +2744,7 @@ globule@^1.0.0: lodash "~4.17.12" minimatch "~3.0.2" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -3029,17 +2917,6 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.1: - version "4.7.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" - integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -3072,11 +2949,6 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3087,11 +2959,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -3583,11 +3450,6 @@ is-nan@^1.2.1: dependencies: define-properties "^1.1.3" -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - is-number-like@^1.0.3: version "1.0.8" resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" @@ -3667,16 +3529,11 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" @@ -3736,29 +3593,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - istanbul-lib-instrument@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" @@ -3772,15 +3611,6 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" -istanbul-lib-report@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -3790,17 +3620,6 @@ istanbul-lib-report@^3.0.0: make-dir "^3.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - istanbul-lib-source-maps@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" @@ -3810,13 +3629,6 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== - dependencies: - html-escaper "^2.0.0" - istanbul-reports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" @@ -3825,26 +3637,6 @@ istanbul-reports@^3.0.0: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -istanbul@^0.4.0: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - jasmine-core@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" @@ -3879,7 +3671,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: +js-yaml@^3.13.1, js-yaml@~3.13.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -3970,31 +3762,12 @@ karma-chrome-launcher@^3.1.0: dependencies: which "^1.2.1" -karma-coverage@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-2.0.1.tgz#f024f191f0f135dee2403763ac36cc52aac279ac" - integrity sha512-SnFkHsnLsaXfxkey51rRN9JDLAEKYW2Lb0qOEvcruukk0NkSNDkjobNDZPt9Ni3kIhLZkLtpGOz661hN7OaZvQ== - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - istanbul-lib-coverage "^2.0.5" - istanbul-lib-instrument "^3.3.0" - istanbul-lib-report "^2.0.8" - istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" - lodash "^4.17.11" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-coveralls@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/karma-coveralls/-/karma-coveralls-2.1.0.tgz#b0fde853d0a7f35c5db8c8e56706b760f1069e2c" - integrity sha512-l2qg7ufv7ooPJ5gFDfQM63eI6LaNGjGlkR8PIvBsi/m3nrfY+m4a7ph6fvQ7Zb+gDTWlo92NM5H0p+VTk8lupw== +karma-cli@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-2.0.0.tgz#481548d28661af4cc68f3d8e09708f17d2cba931" + integrity sha512-1Kb28UILg1ZsfqQmeELbPzuEb5C6GZJfVIk0qOr8LNYQuYWmAaqP16WpbpKEjhejDrDYyYOwwJXSZO6u7q5Pvw== dependencies: - coveralls "~3.0.0" - lcov-result-merger "^3.0.0" - through2 "^2.0.0" - vinyl-fs "^3.0.2" + resolve "^1.3.3" karma-jasmine@^3.1.1: version "3.1.1" @@ -4003,10 +3776,10 @@ karma-jasmine@^3.1.1: dependencies: jasmine-core "^3.5.0" -karma-typescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.0.0.tgz#8c3c776c3c304aefd88b3daa2f54f5c51cb3b938" - integrity sha512-O8pQNKqbykAc20vjc1hd0CmIDycjxNAopK9ZADfG1ca7l2NA8M8HEnWDUxX2Q8pnsOipFkdLRRU3rogzdLufFA== +karma-typescript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.0.1.tgz#9caf1bc4aa416c8860ed32f8e452397472d7fb64" + integrity sha512-/AqfeOODqqtB145Lm3Kbx8o05BXxSgSS7WckxYgehkz1oA0/9pdpGRm8VlMqI7UXoLg/YrpZoIztIxpL7Jls/w== dependencies: acorn "^7.1.0" acorn-walk "^7.0.0" @@ -4108,13 +3881,6 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4134,22 +3900,6 @@ lcov-parse@^1.0.0: resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= -lcov-result-merger@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lcov-result-merger/-/lcov-result-merger-3.1.0.tgz#ae6d1be663dbf7d586d8004642359d39de72039e" - integrity sha512-vGXaMNGZRr4cYvW+xMVg+rg7qd5DX9SbGXl+0S3k85+gRZVK4K7UvxPWzKb/qiMwe+4bx3EOrW2o4mbdb1WnsA== - dependencies: - through2 "^2.0.3" - vinyl "^2.1.0" - vinyl-fs "^3.0.2" - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -4236,7 +3986,7 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.12, lodash@~4.17.5: +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.12, lodash@~4.17.5: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4291,7 +4041,7 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -make-dir@^2.0.0, make-dir@^2.1.0: +make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== @@ -4484,7 +4234,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -4530,7 +4280,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4612,7 +4362,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -4706,7 +4456,7 @@ node-sass@^4.13.1: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: +"nopt@2 || 3", nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -4743,13 +4493,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -4801,7 +4544,7 @@ object-is@^1.0.1: resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -4813,16 +4556,6 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -4860,7 +4593,7 @@ on-headers@~1.0.1: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -4889,7 +4622,7 @@ optimist@^0.6.1, optimist@~0.6.0: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.3: +optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -4901,13 +4634,6 @@ optionator@^0.8.1, optionator@^0.8.3: type-check "~0.3.2" word-wrap "~1.2.3" -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -5226,7 +4952,7 @@ pretty-bytes@^3.0.0: dependencies: number-is-nan "^1.0.0" -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== @@ -5315,7 +5041,7 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3, pumpify@^1.3.5: +pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== @@ -5450,7 +5176,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5550,23 +5276,6 @@ remark-parse@^5.0.0: vfile-location "^2.0.0" xtend "^4.0.1" -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -5589,7 +5298,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@1.0.0, replace-ext@^1.0.0: +replace-ext@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= @@ -5665,24 +5374,17 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@1.1.x, resolve@~1.1.0: +resolve@1.1.7, resolve@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.3.3: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -6076,7 +5778,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -6091,13 +5793,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -6383,7 +6078,7 @@ structured-source@^3.0.2: dependencies: boundary "^1.0.1" -supports-color@6.1.0, supports-color@^6.1.0: +supports-color@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -6395,13 +6090,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6469,15 +6157,7 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: +through2@^2.0.0, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -6537,14 +6217,6 @@ tmp@^0.1.0: dependencies: rimraf "^2.6.3" -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" @@ -6592,13 +6264,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -6724,7 +6389,7 @@ typescript@3.4.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== -uglify-js@^3.1.4, uglify-js@^3.5.0: +uglify-js@^3.5.0: version "3.8.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== @@ -6799,14 +6464,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" @@ -6968,11 +6625,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -7004,54 +6656,6 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vinyl-fs@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0, vinyl@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - vm-browserify@^1.0.1, vm-browserify@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -7193,7 +6797,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: +which@1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -7212,11 +6816,6 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -7297,7 +6896,7 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== From 593addb06f49b5399f3753d36288f439d84f0514 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 21 Mar 2020 20:44:08 -0700 Subject: [PATCH 0196/1298] TS: big code coverage increase * added a bunch of test cases to covert all methods (appart for events and drag&drop callbacks) * found couple issues in code while writting those tests! (what they are supposed to be for) * replaced all `var` with `let` part of #1084 next up: remove all jquery from main code --- README.md | 24 +- demo/advance.html | 4 +- demo/anijs.html | 8 +- demo/column.html | 12 +- demo/experiment/test.html | 10 +- demo/experiment/test2.html | 2 +- demo/float.html | 22 +- demo/knockout.html | 14 +- demo/locked.html | 10 +- demo/nested.html | 13 +- demo/responsive.html | 8 +- demo/right-to-left(rtl).html | 14 +- demo/serialization.html | 8 +- demo/two.html | 9 +- doc/README.md | 26 +- spec/e2e/gridstack-html-spec.js | 4 +- .../1017-items-no-x-y-for-autoPosition.html | 2 +- spec/e2e/html/1142_change_event_missing.html | 6 +- .../html/1143_nested_acceptWidget_types.html | 6 +- spec/e2e/html/1155-max-row.html | 6 +- spec/e2e/html/810-many-columns.html | 6 +- spec/e2e/html/events.html | 38 +- spec/gridstack-engine-spec.ts | 12 + spec/gridstack-spec.ts | 376 +++++++++++++----- spec/utils-spec.ts | 46 ++- src/gridstack-engine.ts | 2 +- src/gridstack.ts | 38 +- src/types.ts | 4 +- src/utils.ts | 4 +- 29 files changed, 466 insertions(+), 268 deletions(-) diff --git a/README.md b/README.md index 8608589b3..2b33f188d 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ creating items dynamically...
    ``` @@ -137,7 +137,7 @@ GridStack.prototype.printCount = function() { console.log('grid has ' + this.engine.nodes.length + ' items'); }; -var grid = GridStack.init(); +let grid = GridStack.init(); // you can now call grid.printCount(); @@ -261,7 +261,7 @@ working on touch-based devices. Also `alwaysShowResizeHandle` option may be useful: ```js -var options = { +let options = { alwaysShowResizeHandle: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) }; GridStack.init(options); @@ -287,7 +287,7 @@ v1.0.0 removed Jquery from the API and external dependencies, which will require **OLD** initializing code + adding a widget + adding an event: ```js // initialization returned Jquery element, requiring second call to get GridStack var -var grid = $('.grid-stack').gridstack(opts?).data('gridstack'); +let grid = $('.grid-stack').gridstack(opts?).data('gridstack'); // returned Jquery element grid.addWidget($('
    test
    '), undefined, undefined, 2, undefined, true); @@ -296,13 +296,13 @@ grid.addWidget($('
    test
    ') $('.grid-stack').on('added', function(e, items) {/* items contains info */}); // grid access after init -var grid = $('.grid-stack').data('gridstack'); +let grid = $('.grid-stack').data('gridstack'); ``` **NEW** ```js // element identifier defaults to '.grid-stack', returns the grid // Note: for Typescript use window.GridStack.init() until next native TS version -var grid = GridStack.init(opts?, element?); +let grid = GridStack.init(opts?, element?); // returns DOM element grid.addWidget('
    test
    ', {width: 2}); @@ -311,7 +311,7 @@ grid.addWidget('
    test
    ', { grid.on('added', function(e, items) {/* items contains info */}); // grid access after init -var grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways... +let grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways... ``` Other vars/global changes ``` @@ -332,18 +332,20 @@ We're working on implementing HTML5 drag'n'drop through the plugin system. Right make sure to read v1.0.0 migration first! -v2.x is a Typescript rewrite of 1.x, using classes and overall code cleanup. You code might not need change from 1.x +v2.x is a Typescript rewrite of 1.x, using classes and overall code cleanup. Your code might need to change from 1.x -In general methods that used optional args as getting vs setting are not used in Typescript. -Also legacy methods that used to take tons of parameters will now take an object. +1. In general methods that used no args = getter vs setter are not used in Typescript. +Also legacy methods that used to take tons of parameters will now take a single object (typically `GridstackOptions` or `GridstackWidget`). ``` -removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {x, y, with,...})` +removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {with, ...})` `float()` to get value --> `getFloat()` 'cellHeight()` to get value --> `getCellheight()` 'verticalMargin()` to get value --> `getVerticalMargin()` ``` +2. `oneColumnMode` would trigger when `window.width` < 768px by default. We now check for grid width instead (more correct and supports nesting). You might need to adjust grid `minWidth` or `disableOneColumnMode`. + Changes ===== diff --git a/demo/advance.html b/demo/advance.html index 3bb6c31d9..db83344d6 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -102,7 +102,7 @@

    Advanced Demo

    diff --git a/demo/float.html b/demo/float.html index fe0de2a96..219f216e8 100644 --- a/demo/float.html +++ b/demo/float.html @@ -8,6 +8,15 @@ + +
    @@ -21,31 +30,31 @@

    Float grid demo

    diff --git a/demo/knockout.html b/demo/knockout.html index d065fde99..2fdbb23a3 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -25,8 +25,8 @@

    knockout.js Demo

    ko.components.register('dashboard-grid', { viewModel: { createViewModel: function (controller, componentInfo) { - var ViewModel = function (controller, componentInfo) { - var grid = null; + let ViewModel = function (controller, componentInfo) { + let grid = null; this.widgets = controller.widgets; @@ -35,7 +35,7 @@

    knockout.js Demo

    grid = GridStack.init({auto: false}); } - var item = items.find(function (i) { return i.nodeType == 1 }); + let item = items.find(function (i) { return i.nodeType == 1 }); grid.addWidget(item); ko.utils.domNodeDisposal.addDisposeCallback(item, function () { grid.removeWidget(item); @@ -56,8 +56,8 @@

    knockout.js Demo

    ].join('') }); - var Controller = function (widgets) { - var self = this; + let Controller = function (widgets) { + let self = this; this.widgets = ko.observableArray(widgets); @@ -78,14 +78,14 @@

    knockout.js Demo

    }; }; - var widgets = [ + let widgets = [ {x: 0, y: 0, width: 2, height: 2, id: '0'}, {x: 2, y: 0, width: 4, height: 2, id: '1'}, {x: 6, y: 0, width: 2, height: 4, id: '2'}, {x: 1, y: 2, width: 4, height: 2, id: '3'} ]; - var controller = new Controller(widgets); + let controller = new Controller(widgets); ko.applyBindings(controller); diff --git a/demo/locked.html b/demo/locked.html index 08925a6e3..92cb4d033 100644 --- a/demo/locked.html +++ b/demo/locked.html @@ -22,25 +22,25 @@

    Locked demo

    diff --git a/demo/serialization.html b/demo/serialization.html index 5fa56121f..2009f0e28 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -22,15 +22,15 @@

    Serialization demo

    diff --git a/spec/e2e/html/1143_nested_acceptWidget_types.html b/spec/e2e/html/1143_nested_acceptWidget_types.html index b3391344d..45de0f61b 100644 --- a/spec/e2e/html/1143_nested_acceptWidget_types.html +++ b/spec/e2e/html/1143_nested_acceptWidget_types.html @@ -58,11 +58,11 @@
    diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index bc49bdbfa..5c09a6c86 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -133,26 +133,10 @@ describe('gridstack', function() { let cell = grid.getCellFromPixel(pixel); expect(cell.x).toBe(2); expect(cell.y).toBe(5); - }); - it('should return {x: 2, y: 5}.', function() { - let options = { - cellHeight: 80, - verticalMargin: 10 - }; - let grid = GridStack.init(options); - let pixel = {top: 500, left: 200}; - let cell = grid.getCellFromPixel(pixel, false); + cell = grid.getCellFromPixel(pixel, false); expect(cell.x).toBe(2); expect(cell.y).toBe(5); - }); - it('should return {x: 2, y: 5}.', function() { - let options = { - cellHeight: 80, - verticalMargin: 10 - }; - let grid = GridStack.init(options); - let pixel = {top: 500, left: 200}; - let cell = grid.getCellFromPixel(pixel, true); + cell = grid.getCellFromPixel(pixel, true); expect(cell.x).toBe(2); expect(cell.y).toBe(5); }); diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 24c949682..167faed7f 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -10,9 +10,15 @@ import { GridStack } from './gridstack'; import { GridItemHTMLElement } from './types'; +/** Drag&Drop drop options */ +export type DDDropOpt = { + /** function or class type that this grid will accept as dropped items (see GridstackOptions.acceptWidgets) */ + accept?: (el: GridItemHTMLElement) => boolean; +} + /** drag&drop options currently called from the main code, but others can be passed in grid options */ // eslint-disable-next-line @typescript-eslint/no-explicit-any -export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | {} | any; +export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | {} | any; export type DDKey = 'minWidth' | 'minHeight' | string; /** @@ -38,7 +44,7 @@ export class GridStackDragDropPlugin { return this; } - public droppable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?): GridStackDragDropPlugin { return this; } @@ -46,7 +52,7 @@ export class GridStackDragDropPlugin { return false; } - public on(el: GridItemHTMLElement, eventName: string, callback): GridStackDragDropPlugin { + public on(el: GridItemHTMLElement, eventName: string, callback: (el: GridItemHTMLElement, ui) => void): GridStackDragDropPlugin { return this; } } diff --git a/src/gridstack.ts b/src/gridstack.ts index 79a884d47..dc4bedb8e 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -247,7 +247,7 @@ export class GridStack { this.el.classList.add('grid-stack-rtl'); } - this.opts._isNested = this.$el.closest('.' + opts.itemClass).length > 0; + this.opts._isNested = Utils.closestByClass(this.el, opts.itemClass) !== null; if (this.opts._isNested) { this.el.classList.add('grid-stack-nested'); } @@ -310,35 +310,10 @@ export class GridStack { this._updateContainerHeight(); - $(window).resize(this._onResizeHandler.bind(this)); + window.addEventListener('resize', this._onResizeHandler.bind(this)); this._onResizeHandler(); - if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { - let trashZone = $(this.opts.removable); - if (!this.dd.isDroppable(trashZone)) { - this.dd.droppable(trashZone, this.opts.removableOptions); - } - this.dd - .on(trashZone, 'dropover', (event, ui) => { - let el: GridItemHTMLElement = ui.draggable.get(0); - let node = el.gridstackNode; - if (!node || node._grid !== this) { - return; - } - el.dataset.inTrashZone = 'true'; - this._setupRemovingTimeout(el); - }) - .on(trashZone, 'dropout', (event, ui) => { - let el: GridItemHTMLElement = ui.draggable.get(0); - let node = el.gridstackNode; - if (!node || node._grid !== this) { - return; - } - el.dataset.inTrashZone = 'false'; - this._clearRemovingTimeout(el); - }); - } - + this._setupRemoveDrop(); this._setupAcceptWidget(); }; @@ -437,7 +412,7 @@ export class GridStack { * Gets current cell width. */ public cellWidth(): number { - // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) + // TODO: take margin into account (horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) return Math.round(this.el.offsetWidth / this.opts.column); } @@ -519,7 +494,7 @@ export class GridStack { * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). */ public destroy(detachGrid = true): GridStack { - $(window).off('resize', this._onResizeHandler); + window.removeEventListener('resize', this._onResizeHandler); this.disable(); if (!detachGrid) { this.removeAll(false); @@ -615,18 +590,24 @@ export class GridStack { * Get the position of the cell under a pixel on screen. * @param position the position of the pixel to resolve in * absolute coordinates, as an object with top and left properties - * @param useOffset if true, value will be based on offset vs position (Optional. Default false). + * @param useDocRelative if true, value will be based on document position vs parent position (Optional. Default false). * Useful when grid is within `position: relative` element * * Returns an object with properties `x` and `y` i.e. the column and row in the grid. */ - public getCellFromPixel(position: MousePosition, useOffset = false): CellPosition { - let containerPos = (useOffset ? this.$el.offset() : this.$el.position()); + public getCellFromPixel(position: MousePosition, useDocRelative = false): CellPosition { + let box = this.el.getBoundingClientRect(); + let containerPos; + if (useDocRelative) { + containerPos = {top: box.top + document.documentElement.scrollTop, left: box.left}; + } else { + containerPos = {top: this.el.offsetTop, left: this.el.offsetLeft} + } let relativeLeft = position.left - containerPos.left; let relativeTop = position.top - containerPos.top; - let columnWidth = Math.floor(this.$el.width() / this.opts.column); - let rowHeight = Math.floor(this.$el.height() / parseInt(this.el.getAttribute('data-gs-current-row'))); + let columnWidth = Math.floor(box.width / this.opts.column); + let rowHeight = Math.floor(box.height / parseInt(this.el.getAttribute('data-gs-current-row'))); return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)}; } @@ -1216,7 +1197,7 @@ export class GridStack { cellWidth = this.cellWidth(); let strictCellHeight = this.getCellHeight(); // heigh without v-margin // compute height with v-margin (Note: we add 1 margin as last row is missing it) - cellFullHeight = (this.$el.height() + this.getVerticalMargin()) / parseInt(this.el.getAttribute('data-gs-current-row')); + cellFullHeight = (this.el.getBoundingClientRect().height + this.getVerticalMargin()) / parseInt(this.el.getAttribute('data-gs-current-row')); let { target } = event; @@ -1398,9 +1379,7 @@ export class GridStack { return this; } - private _prepareElement(el: GridItemHTMLElement, triggerAddEvent?: boolean): GridStack { - triggerAddEvent = (triggerAddEvent !== undefined ? triggerAddEvent : false); - + private _prepareElement(el: GridItemHTMLElement, triggerAddEvent = false): GridStack { el.classList.add(this.opts.itemClass); let node = this._readAttr(el, { el: el, _grid: this }); node = this.engine.addNode(node, triggerAddEvent); @@ -1527,6 +1506,31 @@ export class GridStack { return this; } + /** called to setup a trash drop zone if the user specifies it */ + private _setupRemoveDrop(): GridStack { + if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { + let trashZone = document.querySelector(this.opts.removable) as HTMLElement; + if (!trashZone) return this; + if (!this.dd.isDroppable(trashZone)) { + this.dd.droppable(trashZone, this.opts.removableOptions); + } + this.dd + .on(trashZone, 'dropover', (el) => { + let node = el.gridstackNode; + if (!node || node._grid !== this) return; + el.dataset.inTrashZone = 'true'; + this._setupRemovingTimeout(el); + }) + .on(trashZone, 'dropout', (el) => { + let node = el.gridstackNode; + if (!node || node._grid !== this) return; + el.dataset.inTrashZone = 'false'; + this._clearRemovingTimeout(el); + }); + } + return this; + } + /** called to add drag over support to support widgets */ private _setupAcceptWidget(): GridStack { if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; @@ -1534,7 +1538,7 @@ export class GridStack { // vars used by the function callback let draggingElement: GridItemHTMLElement; - let onDrag = event => { + let onDrag = (event) => { let el = draggingElement; let node = el.gridstackNode; let pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); @@ -1544,32 +1548,29 @@ export class GridStack { node._added = true; node.el = el; - node.autoPosition = true; node.x = x; node.y = y; + delete node.autoPosition; this.engine.cleanNodes(); this.engine.beginUpdate(node); this.engine.addNode(node); this._writeAttrs(this.placeholder, node.x, node.y, node.width, node.height); this.el.appendChild(this.placeholder); - node.el = this.placeholder; + node.el = this.placeholder; // dom we update while dragging... node._beforeDragX = node.x; node._beforeDragY = node.y; + this._updateContainerHeight(); + } else if ((x !== node.x || y !== node.y) && this.engine.canMoveNode(node, x, y)) { + this.engine.moveNode(node, x, y); this._updateContainerHeight(); } - if (!this.engine.canMoveNode(node, x, y)) { - return; - } - this.engine.moveNode(node, x, y); - this._updateContainerHeight(); }; this.dd .droppable(this.el, { - accept: ($el) => { // TODO: jquery - let el: GridItemHTMLElement = $el.get(0); + accept: (el: GridItemHTMLElement) => { let node: GridStackNode = el.gridstackNode; if (node && node._grid === this) { return false; @@ -1581,8 +1582,7 @@ export class GridStack { return el.matches(selector); } }) - .on(this.el, 'dropover', (event, ui) => { - let el: GridItemHTMLElement = ui.draggable.get(0); + .on(this.el, 'dropover', (el) => { let width, height; // see if we already have a node with widget/height and check for attributes @@ -1612,10 +1612,9 @@ export class GridStack { $(el).on('drag', onDrag); return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(this.el, 'dropout', (event, ui) => { + .on(this.el, 'dropout', (el) => { // jquery-ui bug. Must verify widget is being dropped out // check node variable that gets set when widget is out of grid - let el: GridItemHTMLElement = ui.draggable.get(0); let node = el.gridstackNode; if (!node || !node._isOutOfGrid) { return; @@ -1630,29 +1629,27 @@ export class GridStack { el.gridstackNode = el._gridstackNodeOrig; return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(this.el, 'drop', (event, ui) => { + .on(this.el, 'drop', (el, ui) => { if (this.placeholder.parentNode === this.el) { this.el.removeChild(this.placeholder); } - let el: GridItemHTMLElement = ui.draggable.get(0); let node: GridStackNode = el.gridstackNode; delete node._isOutOfGrid; node._grid = this; + let originalNode = el._gridstackNodeOrig; - let $el = ui.draggable.clone(false); + el = el.cloneNode(true) as HTMLElement; - el = $el.get(0); el.gridstackNode = node; - let originalNode = (ui.draggable.get(0) as GridItemHTMLElement)._gridstackNodeOrig; if (originalNode && originalNode._grid) { originalNode._grid._triggerRemoveEvent(); } $(ui.helper).remove(); node.el = el; Utils.removePositioningStyles(el); - $el.find('div.ui-resizable-handle').remove(); + $(el).find('div.ui-resizable-handle').remove(); - $el + $(el) .attr('data-gs-x', node.x) .attr('data-gs-y', node.y) .attr('data-gs-width', node.width) @@ -1662,7 +1659,7 @@ export class GridStack { .removeData('draggable') .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') .unbind('drag', onDrag); - this.$el.append(el); + this.el.appendChild(el); this._prepareElementsByNode(el, node); this._updateContainerHeight(); this.engine.addedNodes.push(node); diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts index 0426ccf96..331ab9d09 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -7,7 +7,7 @@ */ import { GridStack } from './gridstack'; -import { GridStackDragDropPlugin, DDOpts, DDKey } from './gridstack-dragdrop-plugin'; +import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt } from './gridstack-dragdrop-plugin'; import { GridItemHTMLElement } from './types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! @@ -58,8 +58,13 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return this; } - public droppable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?): GridStackDragDropPlugin { let $el: JQuery = $(el); + if (typeof opts.accept === 'function' && !opts._accept) { + // convert jquery event to generic element + opts._accept = opts.accept; + opts.accept = ($el: JQuery) => opts._accept($el.get(0)); + } $el.droppable(opts, key, value); return this; } @@ -69,9 +74,9 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return Boolean($el.data('droppable')); } - public on(el: GridItemHTMLElement, eventName: string, callback): GridStackDragDropPlugin { + public on(el: GridItemHTMLElement, eventName: string, callback: (el: GridItemHTMLElement, ui) => void): GridStackDragDropPlugin { let $el: JQuery = $(el); - $el.on(eventName, callback); + $el.on(eventName, (event, ui) => { callback(ui.draggable.get(0), ui) }); return this; } } diff --git a/src/utils.ts b/src/utils.ts index b275a88ea..f6c2ee22b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -165,6 +165,14 @@ export class Utils { return {...target}; // was $.extend({}, target) } + /** return the closest parent matching the given class */ + static closestByClass(el: HTMLElement, name: string): HTMLElement { + el = el.parentElement; + if (!el) return null; + if (el.classList.contains(name)) return el; + return Utils.closestByClass(el, name); + } + static throttle(callback, delay) { let isWaiting = false; From 693fac1e4fec93f6cc55850234e1e7fb1a139355 Mon Sep 17 00:00:00 2001 From: Bujorel Tecu Date: Sun, 29 Mar 2020 13:03:48 -0400 Subject: [PATCH 0198/1298] Do not rely on options Object.prototype --- src/gridstack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gridstack.js b/src/gridstack.js index 3da687c95..98ec15884 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -168,7 +168,7 @@ sources.forEach(function(source) { for (var prop in source) { - if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) { + if (Object.prototype.hasOwnProperty.call(source, prop) && (!Object.prototype.hasOwnProperty.call(target, prop) || target[prop] === undefined)) { target[prop] = source[prop]; } } From 6863514ee154108ef6844e85e900b7b57d9680e1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 29 Mar 2020 11:37:43 -0700 Subject: [PATCH 0199/1298] changelist for #1195 --- doc/CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 6f7901dd9..5ac9ffbe1 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -36,6 +36,7 @@ Change log ## 1.1.1-dev (upcoming) - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode +- fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) ## 1.1.1 (2020-03-17) From cd2c59c93823fb6de522c2a4a06a405e1b4f465c Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 29 Mar 2020 11:33:07 -0700 Subject: [PATCH 0200/1298] TS: events are now native, no jquery left! * all events are now handled by GridStack and no longer use jquery - changed the signature of some. * removed all $ jquery out of main code (engine, util and now gridstack.ts) * fixed `dragstop | resizestop` to be called *after* we update the node attributes no need for old `gsdragstop` - if you call `grid.on()` events rather than directly jquery events. part of #1084 still TODO: deeper testing to make sure I didn't break anything. Checking in wkd work now. --- .vscode/settings.json | 1 - README.md | 10 +- demo/events.js | 50 ++++++ demo/float.html | 15 +- demo/two.html | 14 +- doc/README.md | 81 +++++----- spec/e2e/html/events.html | 98 ------------ spec/gridstack-spec.ts | 2 - src/gridstack-dragdrop-plugin.ts | 11 +- src/gridstack-engine.ts | 7 + src/gridstack.ts | 183 +++++++++------------- src/index.ts | 4 +- src/jqueryui-gridstack-dragdrop-plugin.ts | 26 ++- src/types.ts | 10 ++ src/utils.ts | 2 +- 15 files changed, 235 insertions(+), 279 deletions(-) create mode 100644 demo/events.js delete mode 100644 spec/e2e/html/events.html diff --git a/.vscode/settings.json b/.vscode/settings.json index d22d5f620..56337b8d4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,7 +12,6 @@ "droppable", "gridster", "gsresize", - "gsresizestop", "jqueryui", "resizestart" ] diff --git a/README.md b/README.md index 2b33f188d..75abcd9de 100644 --- a/README.md +++ b/README.md @@ -332,19 +332,21 @@ We're working on implementing HTML5 drag'n'drop through the plugin system. Right make sure to read v1.0.0 migration first! -v2.x is a Typescript rewrite of 1.x, using classes and overall code cleanup. Your code might need to change from 1.x +v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes and overall code cleanup. Your code might need to change from 1.x -1. In general methods that used no args = getter vs setter are not used in Typescript. +1. In general methods that used no args (getter) vs setter are not used in Typescript. Also legacy methods that used to take tons of parameters will now take a single object (typically `GridstackOptions` or `GridstackWidget`). ``` removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {with, ...})` `float()` to get value --> `getFloat()` -'cellHeight()` to get value --> `getCellheight()` +'cellHeight()` to get value --> `getCellHeight()` 'verticalMargin()` to get value --> `getVerticalMargin()` ``` -2. `oneColumnMode` would trigger when `window.width` < 768px by default. We now check for grid width instead (more correct and supports nesting). You might need to adjust grid `minWidth` or `disableOneColumnMode`. +2. event signatures are generic and not jquery-ui dependent anymore. `gsresizestop` has been removed as `resizestop|dragstop` are now called **after** the DOm attributes have been updated. + +3. `oneColumnMode` would trigger when `window.width` < 768px by default. We now check for grid width instead (more correct and supports nesting). You might need to adjust grid `minWidth` or `disableOneColumnMode`. Changes ===== diff --git a/demo/events.js b/demo/events.js new file mode 100644 index 000000000..6c8c6bc18 --- /dev/null +++ b/demo/events.js @@ -0,0 +1,50 @@ +function addEvents(grid, id) { + let g = (id !== undefined ? 'grid' + id + ' ' : ''); + + grid.on('added removed change', function(event, items) { + let str = ''; + items.forEach(function(item) { str += ' (' + item.x + ',' + item.y + ' ' + item.width + 'x' + item.height + ')'; }); + console.log(g + event.type + ' ' + items.length + ' items (x,y w h):' + str ); + }); + + grid.on('disable', function(event) { + let grid = event.target; + console.log(g + 'disable'); + }); + + grid.on('dragstart', function(event, el) { + let node = el.gridstackNode; + let x = el.getAttribute('data-gs-x'); + let y= el.getAttribute('data-gs-y'); + console.log(g + 'dragstart ' + el.textContent + ' pos: (' + node.x + ',' + node.y + ') vs (' + x + ',' + y + ')'); + }); + + grid.on('dragstop', function(event, el) { + let node = el.gridstackNode; + let x = el.getAttribute('data-gs-x'); + let y= el.getAttribute('data-gs-y'); + console.log(g + 'dragstop ' + el.textContent + ' pos: (' + node.x + ',' + node.y + ') vs (' + x + ',' + y + ')'); + }); + + grid.on('dropped', function(event, previousWidget, newWidget) { + console.log(g + 'dropped - Removed widget that was dragged out of grid:', previousWidget); + console.log(g + 'dropped - Added widget in dropped grid:', newWidget); + }); + + grid.on('enable', function(event) { + let grid = event.target; + console.log(g + 'enable'); + }); + + grid.on('resizestart', function(event, el) { + let w = el.getAttribute('data-gs-width'); + let h = el.getAttribute('data-gs-height'); + console.log(g + 'resizestart ' + el.textContent + ' size: (' + w + ' x ' + h + ')'); + }); + + grid.on('resizestop', function(event, el) { + let w = el.getAttribute('data-gs-width'); + let h = el.getAttribute('data-gs-height'); + console.log(g + 'resizestop ' + el.textContent + ' size: (' + w + ' x ' + h + ')'); + }); +} \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index ee62df46d..b3b378fed 100644 --- a/demo/float.html +++ b/demo/float.html @@ -28,21 +28,10 @@

    Float grid demo



    - + - - - - - -
    -

    Events test

    - -
    -
    -
    - - - - diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 5c09a6c86..e5eef27c8 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -1417,7 +1417,6 @@ describe('gridstack', function() { let fcn = (event: CustomEvent) => {}; grid.on('added', fcn).on('enable', fcn).on('dragstart', fcn); expect((grid as any)._gsEventHandler.enable).not.toBe(undefined); - (grid as any)._triggerNativeEvent(grid.el, '.grid-stack-item', 'enable') grid.off('added').off('enable').off('dragstart'); expect((grid as any)._gsEventHandler.enable).toBe(undefined); }); @@ -1426,7 +1425,6 @@ describe('gridstack', function() { let fcn = (event: CustomEvent) => {}; grid.on('added enable dragstart', fcn); expect((grid as any)._gsEventHandler.enable).not.toBe(undefined); - (grid as any)._triggerNativeEvent(grid.el, '.grid-stack-item', 'enable') grid.off('added enable dragstart'); expect((grid as any)._gsEventHandler.enable).toBe(undefined); }); diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 167faed7f..08c5e0d21 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { GridStack } from './gridstack'; -import { GridItemHTMLElement } from './types'; +import { GridItemHTMLElement, GridStackNode, GridEvent } from './types'; /** Drag&Drop drop options */ export type DDDropOpt = { @@ -21,6 +21,9 @@ export type DDDropOpt = { export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | {} | any; export type DDKey = 'minWidth' | 'minHeight' | string; +/** drag&drop events callbacks */ +export type DDCallback = (event: GridEvent, arg2: GridItemHTMLElement) => void; + /** * Base class for drag'n'drop plugin. */ @@ -52,7 +55,11 @@ export class GridStackDragDropPlugin { return false; } - public on(el: GridItemHTMLElement, eventName: string, callback: (el: GridItemHTMLElement, ui) => void): GridStackDragDropPlugin { + public on(el: GridItemHTMLElement, eventName: string, callback: DDCallback): GridStackDragDropPlugin { + return this; + } + + public off(el: GridItemHTMLElement, eventName: string): GridStackDragDropPlugin { return this; } } diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index ade63c8e9..475a71136 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -598,6 +598,13 @@ export class GridStackEngine { return this; } + /** called to remove all internal values */ + public cleanupNode(node: GridStackNode) { + for (let prop in node) { + if (prop[0] === '_') delete node[prop]; + } + } + // legacy method renames private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } diff --git a/src/gridstack.ts b/src/gridstack.ts index dc4bedb8e..e42e9d518 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,20 +8,16 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils'; -import { GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; +import { GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString, GridEvent } from './types'; import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin'; -// TODO: TEMPORARY until we remove all jquery calls -// also see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs -import * as $ from './jquery.js'; - export type GridStackElement = string | HTMLElement | GridItemHTMLElement; export interface GridHTMLElement extends HTMLElement { gridstack?: GridStack; // grid's parent DOM element points back to grid class } export type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' | - 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop'; + 'enable' | 'removed' | 'resizestart' | 'resizestop'; /** Defines the coordinates of an object */ export interface MousePosition { @@ -149,7 +145,6 @@ export class GridStack { /** @internal */ private placeholder: HTMLElement; - private $el: JQuery; // TODO: legacy code private dd: GridStackDragDropPlugin; private _oneColumnMode: boolean; private _prevColumn: number; @@ -165,7 +160,6 @@ export class GridStack { */ public constructor(el: GridHTMLElement, opts: GridstackOptions = {}) { this.el = el; // exposed HTML element to the user - this.$el = $(el); // legacy code opts = opts || {}; // handles null/undefined/0 obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); @@ -794,53 +788,56 @@ export class GridStack { * */ // eslint-disable-next-line @typescript-eslint/no-explicit-any - public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Record, arg3?: Record) => void): GridStack { + public on(name: GridStackEvent, callback: (event: GridEvent, arg2?: GridItemHTMLElement | GridStackNode[]) => void): GridStack { // check for array of names being passed instead - if (eventName.indexOf(' ') !== -1) { - let names = eventName.split(' ') as GridStackEvent[]; + if (name.indexOf(' ') !== -1) { + let names = name.split(' ') as GridStackEvent[]; names.forEach(name => this.on(name, callback)); return this; } - if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { - // native CustomEvent handlers - cash the generic handlers so we can remove - let noData = (eventName === 'enable' || eventName === 'disable'); + if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') { + // native CustomEvent handlers - cash the generic handlers so we can easily remove + let noData = (name === 'enable' || name === 'disable'); this._gsEventHandler = this._gsEventHandler || {}; if (noData) { - this._gsEventHandler[eventName] = (event) => callback(event); + this._gsEventHandler[name] = (event) => callback(event); } else { - this._gsEventHandler[eventName] = (event) => callback(event, event.detail); + this._gsEventHandler[name] = (event) => callback(event, event.detail); } - this.el.addEventListener(eventName, this._gsEventHandler[eventName]); + this.el.addEventListener(name, this._gsEventHandler[name]); + } else if (name === 'dragstart' || name === 'dragstop' || name === 'resizestart' || name === 'resizestop' || name === 'dropped') { + // drag&drop stop events NEED to be call them AFTER we update node attributes so handle them ourself. + // do same for start event to make it easier... + this._gsEventHandler[name] = callback; } else { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - this.$el.on(eventName as any, callback); // still JQuery events + console.log('gridstack.on(' + name + ') event not supported'); } return this; } /** * unsubscribe from the 'on' event below - * @param eventName of the event (see possible values) + * @param name of the event (see possible values) */ - public off(eventName: GridStackEvent): GridStack { + public off(name: GridStackEvent): GridStack { + if (!this._gsEventHandler) return; + // check for array of names being passed instead - if (eventName.indexOf(' ') !== -1) { - let names = eventName.split(' ') as GridStackEvent[]; + if (name.indexOf(' ') !== -1) { + let names = name.split(' ') as GridStackEvent[]; names.forEach(name => this.off(name)); return this; } - if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') { + if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') { // remove native CustomEvent handlers - if (this._gsEventHandler && this._gsEventHandler[eventName]) { - this.el.removeEventListener(eventName, this._gsEventHandler[eventName]); - delete this._gsEventHandler[eventName]; + if (this._gsEventHandler && this._gsEventHandler[name]) { + this.el.removeEventListener(name, this._gsEventHandler[name]); } - } else { - // still JQuery events - this.$el.off(eventName); } + delete this._gsEventHandler[name]; + return this; } @@ -1166,7 +1163,7 @@ export class GridStack { private _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; - if (node._removeTimeout || !this.opts.removable) { return this; } + if (!node || node._removeTimeout || !this.opts.removable) return this; node._removeTimeout = setTimeout(() => { el.classList.add('grid-stack-item-removing'); node._isAboutToRemove = true; @@ -1176,7 +1173,7 @@ export class GridStack { private _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; - if (!node._removeTimeout) { return this; } + if (!node || !node._removeTimeout) return this; clearTimeout(node._removeTimeout); node._removeTimeout = null; el.classList.remove('grid-stack-item-removing'); @@ -1192,6 +1189,11 @@ export class GridStack { /** called when item starts moving/resizing */ let onStartMoving = (event, ui) => { + // trigger any 'dragstart' / 'resizestart' manually + if (this._gsEventHandler[event.type]) { + this._gsEventHandler[event.type](event, event.target); + } + this.engine.cleanNodes(); this.engine.beginUpdate(node); cellWidth = this.cellWidth(); @@ -1287,24 +1289,22 @@ export class GridStack { node._lastTriedHeight = height; this.engine.moveNode(node, x, y, width, height); this._updateContainerHeight(); - - if (event.type === 'resize') { - $(event.target).trigger('gsresize', node); - } } /** called when the item stops moving/resizing */ let onEndMoving = (event) => { let { target } = event; - if (!target.gridstackNode) { return; } + if (!target.gridstackNode) return; // let forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? if (this.placeholder.parentNode === this.el) { this.el.removeChild(this.placeholder) } node.el = target; if (node._isAboutToRemove) { - // forceNotify = true; let gridToNotify = el.gridstackNode._grid; + if (gridToNotify._gsEventHandler[event.type]) { + gridToNotify._gsEventHandler[event.type](event, target); + } gridToNotify._triggerRemoveEvent(); delete el.gridstackNode; el.remove(); @@ -1321,6 +1321,9 @@ export class GridStack { node._temporaryRemoved = false; this.engine.addNode(node); } + if (this._gsEventHandler[event.type]) { + this._gsEventHandler[event.type](event, target); + } } this._updateContainerHeight(); @@ -1328,19 +1331,9 @@ export class GridStack { this.engine.endUpdate(); - let nestedGrids = target.querySelectorAll('.grid-stack'); - if (nestedGrids.length && event.type === 'resizestop') { - nestedGrids.each((index, el: GridHTMLElement) => { - el.gridstack._onResizeHandler(); - }); - - this._triggerNativeEvent(target, '.grid-stack-item', 'resizestop'); - this._triggerNativeEvent(target, '.grid-stack-item', 'gsresizestop'); - } - + // if we re-sized a nested grid item, let the children resize as well if (event.type === 'resizestop') { - // this.$el.trigger('gsresizestop', o); TODO: missing target ? - this._triggerNativeEvent(this.el, null, 'gsresizestop'); + target.querySelectorAll('.grid-stack').forEach(el => el.gridstack._onResizeHandler()); } } @@ -1368,17 +1361,6 @@ export class GridStack { return this; } - private _triggerNativeEvent(el: HTMLElement, selector: string, eventName: string): GridStack { - let elements = el.querySelectorAll(selector); - if (elements.length) { - let event = document.createEvent('HTMLEvents'); - event.initEvent(eventName, true, false); - - Array.from(elements).map(x => x.dispatchEvent(event)); - } - return this; - } - private _prepareElement(el: GridItemHTMLElement, triggerAddEvent = false): GridStack { el.classList.add(this.opts.itemClass); let node = this._readAttr(el, { el: el, _grid: this }); @@ -1515,13 +1497,13 @@ export class GridStack { this.dd.droppable(trashZone, this.opts.removableOptions); } this.dd - .on(trashZone, 'dropover', (el) => { + .on(trashZone, 'dropover', (event, el) => { let node = el.gridstackNode; if (!node || node._grid !== this) return; el.dataset.inTrashZone = 'true'; this._setupRemovingTimeout(el); }) - .on(trashZone, 'dropout', (el) => { + .on(trashZone, 'dropout', (event, el) => { let node = el.gridstackNode; if (!node || node._grid !== this) return; el.dataset.inTrashZone = 'false'; @@ -1535,11 +1517,7 @@ export class GridStack { private _setupAcceptWidget(): GridStack { if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; - // vars used by the function callback - let draggingElement: GridItemHTMLElement; - - let onDrag = (event) => { - let el = draggingElement; + let onDrag = (event, el: GridItemHTMLElement) => { let node = el.gridstackNode; let pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); let x = Math.max(0, pos.x); @@ -1582,16 +1560,16 @@ export class GridStack { return el.matches(selector); } }) - .on(this.el, 'dropover', (el) => { + .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { let width, height; // see if we already have a node with widget/height and check for attributes - let origNode: GridStackNode = el.gridstackNode; - if (!origNode || !origNode.width || !origNode.height) { + let node = el.gridstackNode; + if (!node || !node.width || !node.height) { let w = parseInt(el.getAttribute('data-gs-width')); - if (w > 0) { origNode = origNode || {}; origNode.width = w; } + if (w > 0) { node = node || {}; node.width = w; } let h = parseInt(el.getAttribute('data-gs-height')); - if (h > 0) { origNode = origNode || {}; origNode.height = h; } + if (h > 0) { node = node || {}; node.height = h; } } // if not calculate the grid size based on element outer size @@ -1599,27 +1577,25 @@ export class GridStack { let cellWidth = this.cellWidth(); let cellHeight = this.getCellHeight(); let verticalMargin = this.opts.verticalMargin as number; - width = origNode && origNode.width ? origNode.width : Math.ceil(el.offsetWidth / cellWidth); - height = origNode && origNode.height ? origNode.height : Math.round((el.offsetHeight + verticalMargin) / (cellHeight + verticalMargin)); - - draggingElement = el; + width = node && node.width ? node.width : Math.ceil(el.offsetWidth / cellWidth); + height = node && node.height ? node.height : Math.round((el.offsetHeight + verticalMargin) / (cellHeight + verticalMargin)); - let node = this.engine.prepareNode({width, height, _added: false, _temporary: true}); - node._isOutOfGrid = true; - el.gridstackNode = node; - el._gridstackNodeOrig = origNode; + let newNode = this.engine.prepareNode({width, height, _added: false, _temporary: true}); + newNode._isOutOfGrid = true; + el.gridstackNode = newNode; + el._gridstackNodeOrig = node; - $(el).on('drag', onDrag); + this.dd.on(el, 'drag', onDrag); return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(this.el, 'dropout', (el) => { + .on(this.el, 'dropout', (event, el: GridItemHTMLElement) => { // jquery-ui bug. Must verify widget is being dropped out // check node variable that gets set when widget is out of grid let node = el.gridstackNode; if (!node || !node._isOutOfGrid) { return; } - $(el).unbind('drag', onDrag); + this.dd.off(el, 'drag'); node.el = null; this.engine.removeNode(node); if (this.placeholder.parentNode === this.el) { @@ -1629,36 +1605,32 @@ export class GridStack { el.gridstackNode = el._gridstackNodeOrig; return false; // prevent parent from receiving msg (which may be grid as well) }) - .on(this.el, 'drop', (el, ui) => { + .on(this.el, 'drop', (event, _el: GridItemHTMLElement) => { if (this.placeholder.parentNode === this.el) { this.el.removeChild(this.placeholder); } - let node: GridStackNode = el.gridstackNode; - delete node._isOutOfGrid; + let node: GridStackNode = _el.gridstackNode; + this.engine.cleanupNode(node); node._grid = this; - let originalNode = el._gridstackNodeOrig; + let originalNode = _el._gridstackNodeOrig; + delete _el.gridstackNode; + delete _el._gridstackNodeOrig; + this.dd + .off(_el, 'drag') + .draggable(_el, 'destroy') + .resizable(_el, 'destroy'); - el = el.cloneNode(true) as HTMLElement; + let el = _el.cloneNode(true) as GridItemHTMLElement; el.gridstackNode = node; if (originalNode && originalNode._grid) { originalNode._grid._triggerRemoveEvent(); } - $(ui.helper).remove(); + _el.remove(); node.el = el; Utils.removePositioningStyles(el); - $(el).find('div.ui-resizable-handle').remove(); - - $(el) - .attr('data-gs-x', node.x) - .attr('data-gs-y', node.y) - .attr('data-gs-width', node.width) - .attr('data-gs-height', node.height) - .addClass(this.opts.itemClass) - .enableSelection() - .removeData('draggable') - .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled') - .unbind('drag', onDrag); + + this._writeAttr(el, node); this.el.appendChild(el); this._prepareElementsByNode(el, node); this._updateContainerHeight(); @@ -1667,10 +1639,9 @@ export class GridStack { this._triggerChangeEvent(); this.engine.endUpdate(); - ui.draggable.unbind('drag', onDrag); - delete ui.draggable.get(0).gridstackNode; - delete ui.draggable.get(0)._gridstackNodeOrig; - this.$el.trigger('dropped', [originalNode, node]); + if (this._gsEventHandler['dropped']) { + this._gsEventHandler['dropped']({type: 'dropped'}, originalNode, node); + } return false; // prevent parent from receiving msg (which may be grid as well) }); return this; diff --git a/src/index.ts b/src/index.ts index e1bcaae19..05c221b21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ /** * The package's root file. Exports all exported classes. */ -import './gridstack-poly.js'; +// import './gridstack-poly.js'; export * from './types'; export * from './utils'; @@ -11,3 +11,5 @@ export * from './gridstack-engine'; export * from './gridstack-dragdrop-plugin'; export * from './gridstack'; export * from './jqueryui-gridstack-dragdrop-plugin'; + +// declare module 'gridstack'; diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts index 331ab9d09..7e056bc9d 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -7,7 +7,7 @@ */ import { GridStack } from './gridstack'; -import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt } from './gridstack-dragdrop-plugin'; +import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback } from './gridstack-dragdrop-plugin'; import { GridItemHTMLElement } from './types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! @@ -25,8 +25,12 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { let $el: JQuery = $(el); - if (opts === 'disable' || opts === 'enable' || opts === 'destroy') { + if (opts === 'disable' || opts === 'enable') { $el.resizable(opts); + } else if (opts === 'destroy') { + if ($el.data('ui-resizable')) { // error to call destroy if not there + $el.resizable(opts); + } } else if (opts === 'option') { $el.resizable(opts, key, value); } else { @@ -42,8 +46,12 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { let $el: JQuery = $(el); - if (opts === 'disable' || opts === 'enable' || opts === 'destroy') { + if (opts === 'disable' || opts === 'enable') { $el.draggable(opts); + } else if (opts === 'destroy') { + if ($el.data('ui-draggable')) { // error to call destroy if not there + $el.draggable(opts); + } } else if (opts === 'option') { $el.draggable(opts, key, value); } else { @@ -71,12 +79,18 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { public isDroppable(el: GridItemHTMLElement): boolean { let $el: JQuery = $(el); - return Boolean($el.data('droppable')); + return Boolean($el.data('ui-droppable')); } - public on(el: GridItemHTMLElement, eventName: string, callback: (el: GridItemHTMLElement, ui) => void): GridStackDragDropPlugin { + public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDragDropPlugin { let $el: JQuery = $(el); - $el.on(eventName, (event, ui) => { callback(ui.draggable.get(0), ui) }); + $el.on(name, (event, ui) => { callback(event, ui.draggable ? ui.draggable.get(0) : event.target) }); + return this; + } + + public off(el: GridItemHTMLElement, name: string): GridStackDragDropPlugin { + let $el: JQuery = $(el); + $el.off(name); return this; } } diff --git a/src/types.ts b/src/types.ts index b3eaac936..4e08cd730 100644 --- a/src/types.ts +++ b/src/types.ts @@ -16,6 +16,16 @@ export interface GridItemHTMLElement extends HTMLElement { _gridstackNodeOrig?: GridStackNode; } +/** generic event sent back from callbacks - extends Event in many cases, or bare when coming from drag&drop plugin */ +export interface GridEvent { + /** name of the event */ + type?: string; + /** DOM element this was fired for */ + target?: HTMLElement; + + [key: string]: any; +} + /** * Defines the options for a Grid */ diff --git a/src/utils.ts b/src/utils.ts index f6c2ee22b..894b951f5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -152,7 +152,7 @@ export class Utils { sources.forEach(function (source) { for (let prop in source) { - if (source.hasOwnProperty(prop) && (target[prop] === null || target[prop] === undefined)) { + if (Object.prototype.hasOwnProperty.call(source, prop) && (target[prop] === null || target[prop] === undefined)) { target[prop] = source[prop]; } } From 65d84e73c16ca74d79fbc85a7919b4bd9fd436ed Mon Sep 17 00:00:00 2001 From: Bujorel Tecu Date: Sun, 22 Mar 2020 22:10:51 -0400 Subject: [PATCH 0201/1298] Export version without jQuery --- src/gridstack-only.ts | 12 ++++++++++++ webpack.config.js | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/gridstack-only.ts diff --git a/src/gridstack-only.ts b/src/gridstack-only.ts new file mode 100644 index 000000000..a7788a4da --- /dev/null +++ b/src/gridstack-only.ts @@ -0,0 +1,12 @@ +// index.ts 2.0.0-rc @preserve + +/** + * A package's root file. Exports all non jQuery exported classes. + */ +import './gridstack-poly.js'; + +export * from './types'; +export * from './utils'; +export * from './gridstack-engine'; +export * from './gridstack-dragdrop-plugin'; +export * from './gridstack'; diff --git a/webpack.config.js b/webpack.config.js index 55e2cce96..6a6562551 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,7 +1,10 @@ const path = require('path'); module.exports = { - entry: './src/index.ts', + entry: { + 'gridstack-all': './src/index.ts', + 'gridstack-no-jquery': './src/gridstack-only.ts' + }, mode: 'development', module: { rules: [ @@ -16,7 +19,7 @@ module.exports = { extensions: [ '.ts', '.js' ], }, output: { - filename: 'gridstack.all.js', + filename: '[name].js', path: path.resolve(__dirname, 'dist'), library: 'GridStack', libraryExport: 'GridStack', From 21be39fdefbb4ddb98b8b078a97c3cbb340bd587 Mon Sep 17 00:00:00 2001 From: Bujorel Tecu Date: Sun, 22 Mar 2020 22:40:27 -0400 Subject: [PATCH 0202/1298] Exclude jQuery --- src/jqueryui-gridstack-dragdrop-plugin.ts | 4 ++-- webpack.config.js | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts index 7e056bc9d..39a551f57 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -12,7 +12,7 @@ import { GridItemHTMLElement } from './types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! // see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs -import * as $ from './jquery.js'; +import * as $ from 'jquery'; import './jquery-ui.js'; /** @@ -110,4 +110,4 @@ JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDro .... scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; return JQueryUIGridStackDragDropPlugin; -*/ \ No newline at end of file +*/ diff --git a/webpack.config.js b/webpack.config.js index 6a6562551..a6688c7e3 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,6 +5,9 @@ module.exports = { 'gridstack-all': './src/index.ts', 'gridstack-no-jquery': './src/gridstack-only.ts' }, + externals: { + jquery: 'jQuery' + }, mode: 'development', module: { rules: [ From c08bff60b6321c8be0301036d1d4bde857ad715f Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Apr 2020 14:16:59 -0700 Subject: [PATCH 0203/1298] reverted btecu jquery changes #1241 as that changed the filename and having all.js containing jquery (which it should) --- src/gridstack-only.ts | 12 ------------ src/jqueryui-gridstack-dragdrop-plugin.ts | 2 +- webpack.config.js | 5 ++--- 3 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 src/gridstack-only.ts diff --git a/src/gridstack-only.ts b/src/gridstack-only.ts deleted file mode 100644 index a7788a4da..000000000 --- a/src/gridstack-only.ts +++ /dev/null @@ -1,12 +0,0 @@ -// index.ts 2.0.0-rc @preserve - -/** - * A package's root file. Exports all non jQuery exported classes. - */ -import './gridstack-poly.js'; - -export * from './types'; -export * from './utils'; -export * from './gridstack-engine'; -export * from './gridstack-dragdrop-plugin'; -export * from './gridstack'; diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts index 39a551f57..0ae5b4f31 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jqueryui-gridstack-dragdrop-plugin.ts @@ -12,7 +12,7 @@ import { GridItemHTMLElement } from './types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! // see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs -import * as $ from 'jquery'; +import * as $ from './jquery.js'; import './jquery-ui.js'; /** diff --git a/webpack.config.js b/webpack.config.js index a6688c7e3..1633f59a2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,11 +2,10 @@ const path = require('path'); module.exports = { entry: { - 'gridstack-all': './src/index.ts', - 'gridstack-no-jquery': './src/gridstack-only.ts' + 'gridstack.all': './src/index.ts' }, externals: { - jquery: 'jQuery' + // jquery: 'jQuery' }, mode: 'development', module: { From fc69a662787f7d3c7f783a50b2109df5fae9cc29 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Apr 2020 15:47:57 -0700 Subject: [PATCH 0204/1298] TS: packaging fix * gridstack.all.js is now min again and back to 185k (from 550k with sourcemap) * added @internal to prevent exporting private methods/vars to .d.ts * fixed test cases again * move jquery files to sub folder (what remains to convert) more #1084 --- .eslintignore | 4 +- Gruntfile.js | 30 ++-- demo/float.html | 8 +- demo/two.html | 11 +- doc/README.md | 20 +-- karma.conf.js | 2 +- package.json | 3 +- spec/gridstack-spec.ts | 2 +- src/gridstack-dragdrop-plugin.ts | 4 +- src/gridstack-engine.ts | 6 +- src/gridstack-poly.js | 3 + src/gridstack.ts | 138 +++++++++++------- src/index.ts | 6 +- src/{ => jq}/jquery-ui.js | 0 src/{ => jq}/jquery.js | 0 .../jqueryui-gridstack-dragdrop-plugin.ts | 8 +- src/types.ts | 10 -- webpack.config.js | 5 +- 18 files changed, 139 insertions(+), 121 deletions(-) rename src/{ => jq}/jquery-ui.js (100%) rename src/{ => jq}/jquery.js (100%) rename src/{ => jq}/jqueryui-gridstack-dragdrop-plugin.ts (91%) diff --git a/.eslintignore b/.eslintignore index 62f10bcb9..04889968f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,5 @@ dist/*.js demo/* spec/* -src/jquery.js -src/jquery-ui.js +src/jq/jquery.js +src/jq/jquery-ui.js diff --git a/Gruntfile.js b/Gruntfile.js index f63dd0319..fad4078e8 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,7 +1,7 @@ /*eslint-disable camelcase */ module.exports = function(grunt) { grunt.loadNpmTasks('grunt-sass'); - grunt.loadNpmTasks('grunt-contrib-cssmin'); + // grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-eslint'); @@ -16,7 +16,7 @@ module.exports = function(grunt) { sass: { options: { implementation: sass, - sourceMap: true + sourceMap: false }, dist: { files: { @@ -25,6 +25,7 @@ module.exports = function(grunt) { } } }, + /* very little gain cssmin: { dist: { options: { @@ -37,21 +38,18 @@ module.exports = function(grunt) { } } }, + */ copy: { dist: { files: { -/* 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], - 'dist/jquery.js': ['src/jquery.js'], - 'dist/jquery-ui.js': ['src/jquery-ui.js'], -*/ + 'dist/jq/jquery.js': ['src/jq/jquery.js'], + 'dist/jq/jquery-ui.js': ['src/jq/jquery-ui.js'], 'dist/src/gridstack.scss': ['src/gridstack.scss'], 'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'], } } }, - - /* uglify: { options: { sourceMap: true, @@ -62,14 +60,18 @@ module.exports = function(grunt) { }, dist: { files: { - //'dist/gridstack-poly.min.js': 'src/gridstack-poly.js', - //'dist/jquery.min.js': 'src/jquery.js', - //'dist/jquery-ui.min.js': 'src/jquery-ui.js' + 'dist/jq/jqueryui-gridstack-dragdrop-plugin.min.js': 'dist/jq/jqueryui-gridstack-dragdrop-plugin.js', + 'dist/jq/jquery.min.js': 'src/jq/jquery.js', + 'dist/jq/jquery-ui.min.js': 'src/jq/jquery-ui.js', + + 'dist/gridstack-dragdrop-plugin.min.js': 'dist/gridstack-dragdrop-plugin.js', + 'dist/gridstack-engine.min.js': 'dist/gridstack-engine.js', + 'dist/gridstack-poly.min.js': 'src/gridstack-poly.js', + 'dist/types.min.js': 'dist/types.js', + 'dist/utils.min.js': 'dist/utils.js', } } }, - */ - eslint: { target: ['*.js', 'src/*.js'] }, @@ -116,7 +118,7 @@ module.exports = function(grunt) { }); grunt.registerTask('lint', ['eslint']); - grunt.registerTask('default', ['sass', 'cssmin', /*'eslint',*/ 'copy', /*'uglify'*/]); + grunt.registerTask('default', ['sass', /*'cssmin', 'eslint',*/ 'copy', 'uglify']); grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']); }; /*eslint-enable camelcase */ \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index b3b378fed..7d6fa58fc 100644 --- a/demo/float.html +++ b/demo/float.html @@ -8,13 +8,13 @@ - diff --git a/demo/two.html b/demo/two.html index d2564089e..8b2edad09 100644 --- a/demo/two.html +++ b/demo/two.html @@ -80,17 +80,12 @@

    Two grids demo

    float: false Compact -
    -
    -
    -
    -
    +
    @@ -108,7 +103,7 @@

    Two grids demo

    grids[1].float(true); let items = [ - {x: 1, y: 0, width: 2, height: 2}, + {x: 0, y: 0, width: 2, height: 2}, {x: 3, y: 1, width: 1, height: 2}, {x: 4, y: 1, width: 1, height: 1}, {x: 2, y: 3, width: 3, height: 1, maxWidth: 3, id: 'special', text: 'has maxWidth=3'}, diff --git a/doc/README.md b/doc/README.md index ce5be0df5..2107d80a7 100644 --- a/doc/README.md +++ b/doc/README.md @@ -147,7 +147,7 @@ The Typescript `GridStackEvent` list all possible values, and nothing else is su Called when widgets are being added to a grid ```js -grid.on('added', function(event: GridEvent, items: GridStackNode[]) { +grid.on('added', function(event: Event, items: GridStackNode[]) { items.forEach(function(item) {...}); }); ``` @@ -157,7 +157,7 @@ grid.on('added', function(event: GridEvent, items: GridStackNode[]) { Occurs when widgets change their position/size due to constrain or direct changes ```js -grid.on('change', function(event: GridEvent, items: GridStackNode[]) { +grid.on('change', function(event: Event, items: GridStackNode[]) { items.forEach(function(item) {...}); }); ``` @@ -165,7 +165,7 @@ grid.on('change', function(event: GridEvent, items: GridStackNode[]) { ### disable(event) ```js -grid.on('disable', function(event: GridEvent) { +grid.on('disable', function(event: Event) { let grid: GridStack = event.target.gridstack; }); ``` @@ -175,7 +175,7 @@ grid.on('disable', function(event: GridEvent) { called when grid item is starting to be dragged ```js -grid.on('dragstart', function(event: GridEvent, el: GridItemHTMLElement) { +grid.on('dragstart', function(event: Event, el: GridItemHTMLElement) { }); ``` @@ -183,7 +183,7 @@ grid.on('dragstart', function(event: GridEvent, el: GridItemHTMLElement) { called after the user is done moving the item, with updated DOM attributes. ```js -grid.on('dragstop', function(event: GridEvent, el: GridItemHTMLElement) { +grid.on('dragstop', function(event: Event, el: GridItemHTMLElement) { let x = parseInt(el.getAttribute('data-gs-x')) || 0; // or all values... let node: GridStackNode = el.gridstackNode; // {x, y, width, height, id, ....} @@ -195,7 +195,7 @@ grid.on('dragstop', function(event: GridEvent, el: GridItemHTMLElement) { called when an item has been dropped and accepted over a grid. If the item came from another grid, the previous widget node info will also be sent (but dom item long gone). ```js -grid.on('dropped', function(event: GridEvent, previousWidget: GridStackNode, newWidget: GridStackNode) { +grid.on('dropped', function(event: Event, previousWidget: GridStackNode, newWidget: GridStackNode) { console.log('Removed widget that was dragged out of grid:', previousWidget); console.log('Added widget in dropped grid:', newWidget); }); @@ -204,7 +204,7 @@ grid.on('dropped', function(event: GridEvent, previousWidget: GridStackNode, new ### enable(event) ```js -grid.on('enable', function(event: GridEvent) { +grid.on('enable', function(event: Event) { let grid: GridStack = event.target.gridstack; }); ``` @@ -214,7 +214,7 @@ grid.on('enable', function(event: GridEvent) { Called when items are being removed from the grid ```js -grid.on('removed', function(event: GridEvent, items: GridStackNode[]) { +grid.on('removed', function(event: Event, items: GridStackNode[]) { items.forEach(function(item) {...}); }); ``` @@ -224,7 +224,7 @@ grid.on('removed', function(event: GridEvent, items: GridStackNode[]) { called before the user starts resizing an item ```js -grid.on('resizestart', function(event: GridEvent, el: GridItemHTMLElement) { +grid.on('resizestart', function(event: Event, el: GridItemHTMLElement) { }); ``` @@ -233,7 +233,7 @@ grid.on('resizestart', function(event: GridEvent, el: GridItemHTMLElement) { called after the user is done resizing the item, with updated DOM attributes. ```js -grid.on('resizestop', function(event: GridEvent, el: GridItemHTMLElement) { +grid.on('resizestop', function(event: Event, el: GridItemHTMLElement) { let width = parseInt(el.getAttribute('data-gs-width')) || 0; // or all values... let node: GridStackNode = el.gridstackNode; // {x, y, width, height, id, ....} diff --git a/karma.conf.js b/karma.conf.js index 0ef02742a..31846724e 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -17,7 +17,7 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ - 'src/*.ts', + 'src/**/*.ts', 'spec/*-spec.ts', // 'spec/e2e/*-spec.js' issues with ReferenceError: `browser` & `element` is not defined ], diff --git a/package.json b/package.json index 220b8fba0..74433aa46 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "url": "git+https://github.com/gridstack/gridstack.js.git" }, "scripts": { - "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "build": "yarn --no-progress && rm -rf dist/* && webpack && tsc --stripInternal && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", + "t": "tsc --stripInternal", "web": "rm -rf dist/* && webpack", "test": "yarn lint && karma start karma.conf.js", "lint": "tsc --noEmit && eslint src/*.ts", diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index e5eef27c8..3f647439d 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -1414,7 +1414,7 @@ describe('gridstack', function() { }); it('add 3 single events', function() { let grid = GridStack.init(); - let fcn = (event: CustomEvent) => {}; + let fcn = (event: Event) => {}; grid.on('added', fcn).on('enable', fcn).on('dragstart', fcn); expect((grid as any)._gsEventHandler.enable).not.toBe(undefined); grid.off('added').off('enable').off('dragstart'); diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 08c5e0d21..0d2df6f47 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -8,7 +8,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { GridStack } from './gridstack'; -import { GridItemHTMLElement, GridStackNode, GridEvent } from './types'; +import { GridItemHTMLElement } from './types'; /** Drag&Drop drop options */ export type DDDropOpt = { @@ -22,7 +22,7 @@ export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | {} | export type DDKey = 'minWidth' | 'minHeight' | string; /** drag&drop events callbacks */ -export type DDCallback = (event: GridEvent, arg2: GridItemHTMLElement) => void; +export type DDCallback = (event: Event, arg2: GridItemHTMLElement) => void; /** * Base class for drag'n'drop plugin. diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 475a71136..39c16e6ef 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -62,6 +62,7 @@ export class GridStackEngine { return this; } + /** @internal */ private _fixCollisions(node: GridStackNode): GridStackEngine { this._sortNodes(-1); @@ -125,11 +126,13 @@ export class GridStackEngine { /** float getter method */ public get float(): boolean { return this._float || false; } + /** @internal */ private _sortNodes(dir?: -1 | 1): GridStackEngine { this.nodes = Utils.sort(this.nodes, dir, this.column); return this; } + /** @internal */ private _packNodes(): GridStackEngine { this._sortNodes(); @@ -264,6 +267,7 @@ export class GridStackEngine { return this.nodes.filter(n => n._dirty); } + /** @internal */ private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean): GridStackEngine { if (this.batchMode) { return this } detachNode = (detachNode === undefined ? true : detachNode); @@ -605,7 +609,7 @@ export class GridStackEngine { } } - // legacy method renames + /** @internal legacy method renames */ private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index d3e65ed97..da5ef848e 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -6,6 +6,9 @@ * gridstack.js may be freely distributed under the MIT license. */ +/* eslint-disable prefer-rest-params */ +/* eslint-disable no-var */ + // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent (function () { if (typeof window.CustomEvent === "function") { diff --git a/src/gridstack.ts b/src/gridstack.ts index e42e9d518..72c5b240f 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,7 +8,7 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils'; -import { GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString, GridEvent } from './types'; +import { GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin'; export type GridStackElement = string | HTMLElement | GridItemHTMLElement; @@ -35,33 +35,6 @@ interface GridCSSStyleSheet extends CSSStyleSheet { _max?: number; // internal tracker of the max # of rows we created } -function getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { - return (typeof els === 'string' ? - (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); -} -function getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { - if (typeof els === 'string') { - let list = document.querySelectorAll(els); - if (!list.length) { list = document.querySelectorAll('.' + els) } - if (!list.length) { list = document.querySelectorAll('#' + els) } - return Array.from(list) as GridItemHTMLElement[]; - } - return [els]; -} -function getGridElement(els: string | HTMLElement = '.grid-stack'): GridHTMLElement { - return (typeof els === 'string' ? - (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); -} -function getGridElements(els: string | HTMLElement = '.grid-stack'): GridHTMLElement[] { - if (typeof els === 'string') { - let list = document.querySelectorAll(els); - if (!list.length) { list = document.querySelectorAll('.' + els) } - if (!list.length) { list = document.querySelectorAll('#' + els) } - return Array.from(list) as GridHTMLElement[]; - } - return [els]; -} - /** * Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid. * Note: your grid elements MUST have the following classes for the CSS layout to work: @@ -74,12 +47,6 @@ function getGridElements(els: string | HTMLElement = '.grid-stack'): GridHTMLEle */ export class GridStack { - /** scoping so users can call GridStack.Utils.sort() for example */ - public static Utils = Utils; - - /** scoping so users can call new GridStack.Engine(12) for example */ - public static Engine = GridStackEngine; - /** * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will * simply return the existing instance (ignore any passed options). There is also an initAll() version that support @@ -94,7 +61,7 @@ export class GridStack { * let grid = document.querySelector('.grid-stack').gridstack; */ public static init(options: GridstackOptions = {}, elOrString: GridStackElement = '.grid-stack'): GridStack { - let el = getGridElement(elOrString); + let el = GridStack.getGridElement(elOrString); if (!el) { if (typeof elOrString === 'string') { console.log('gridstack.js: init() no grid was found. Did you forget class ' + elOrString + ' on your element ?' + @@ -121,7 +88,7 @@ export class GridStack { */ public static initAll(options: GridstackOptions = {}, selector = '.grid-stack'): GridStack[] { let grids: GridStack[] = []; - getGridElements(selector).forEach(el => { + GridStack.getGridElements(selector).forEach(el => { if (!el.gridstack) { el.gridstack = new GridStack(el, Utils.clone(options)); } @@ -134,6 +101,12 @@ export class GridStack { return grids; } + /** scoping so users can call GridStack.Utils.sort() for example */ + public static Utils = Utils; + + /** scoping so users can call new GridStack.Engine(12) for example */ + public static Engine = GridStackEngine; + /** the HTML element tied to this grid after it's been initialized */ public el: GridHTMLElement; @@ -143,14 +116,22 @@ export class GridStack { /** grid options - public for classes to access, but use methods to modify! */ public opts: GridstackOptions; + /** current drag&drop plugin being used */ + public dd: GridStackDragDropPlugin; + /** @internal */ private placeholder: HTMLElement; - private dd: GridStackDragDropPlugin; + /** @internal */ private _oneColumnMode: boolean; + /** @internal */ private _prevColumn: number; + /** @internal */ private _stylesId: string; + /** @internal */ private _gsEventHandler: {}; + /** @internal */ private _styles: GridCSSStyleSheet; + /** @internal */ private _isAutoCellHeight: boolean; /** @@ -628,7 +609,7 @@ export class GridStack { * @param val if true widget will be locked. */ public locked(els: GridStackElement, val: boolean): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) return; node.locked = (val || false); @@ -653,7 +634,7 @@ export class GridStack { * grid.makeWidget('gsi-1'); */ public makeWidget(els: GridStackElement): GridItemHTMLElement { - let el = getElement(els); + let el = this.getElement(els); this._prepareElement(el, true); this._updateContainerHeight(); this._triggerAddEvent(); @@ -667,7 +648,7 @@ export class GridStack { * @param val A numeric value of the number of columns */ public maxWidth(els: GridStackElement, val: number): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } node.maxWidth = (val || undefined); @@ -686,7 +667,7 @@ export class GridStack { * @param val A numeric value of the number of columns */ public minWidth(els: GridStackElement, val: number): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } if (val) { @@ -704,7 +685,7 @@ export class GridStack { * @param val A numeric value of the number of rows */ public maxHeight(els: GridStackElement, val: number): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } if (val) { @@ -722,7 +703,7 @@ export class GridStack { * @param val A numeric value of the number of rows */ public minHeight(els: GridStackElement, val: number): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } if (val) { @@ -740,7 +721,7 @@ export class GridStack { * @param val if true widget will be draggable. */ public movable(els: GridStackElement, val: boolean): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } node.noMove = !(val || false); @@ -788,7 +769,7 @@ export class GridStack { * */ // eslint-disable-next-line @typescript-eslint/no-explicit-any - public on(name: GridStackEvent, callback: (event: GridEvent, arg2?: GridItemHTMLElement | GridStackNode[]) => void): GridStack { + public on(name: GridStackEvent, callback: (event: Event, arg2?: GridItemHTMLElement | GridStackNode[]) => void): GridStack { // check for array of names being passed instead if (name.indexOf(' ') !== -1) { let names = name.split(' ') as GridStackEvent[]; @@ -847,7 +828,7 @@ export class GridStack { * @param detachNode if false DOM node won't be removed from the tree (Default? true). */ public removeWidget(els: GridStackElement, detachNode?: boolean): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 if (!node) { @@ -903,7 +884,7 @@ export class GridStack { * @param val if true widget will be resizable. */ public resizable(els: GridStackElement, val: boolean): GridStack { - getElements(els).forEach(el => { + this.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } node.noResize = !(val || false); @@ -1006,6 +987,7 @@ export class GridStack { return this.engine.canBePlacedWithRespectToHeight({x, y, width, height, autoPosition}); } + /** @internal */ private _triggerChangeEvent(skipLayoutChange?: boolean): GridStack { if (this.engine.batchMode) { return this; } let elements = this.engine.getDirtyNodes(true); // verify they really changed @@ -1019,6 +1001,7 @@ export class GridStack { return this; } + /** @internal */ private _triggerAddEvent(): GridStack { if (this.engine.batchMode) { return this } if (this.engine.addedNodes && this.engine.addedNodes.length > 0) { @@ -1031,6 +1014,7 @@ export class GridStack { return this; } + /** @internal */ private _triggerRemoveEvent(): GridStack { if (this.engine.batchMode) { return this; } if (this.engine.removedNodes && this.engine.removedNodes.length > 0) { @@ -1040,13 +1024,14 @@ export class GridStack { return this; } - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // @internal eslint-disable-next-line @typescript-eslint/no-explicit-any private _triggerEvent(name: string, data?: any): GridStack { let event = data ? new CustomEvent(name, {bubbles: false, detail: data}) : new Event(name); this.el.dispatchEvent(event); return this; } + /** @internal */ private _initStyles(): GridStack { if (this._stylesId) { Utils.removeStylesheet(this._stylesId); @@ -1061,6 +1046,7 @@ export class GridStack { return this; } + /** @internal */ private _updateStyles(maxHeight?: number): GridStack { if (this._styles === null || this._styles === undefined) { return this; @@ -1130,6 +1116,7 @@ export class GridStack { return this; } + /** @internal */ private _updateContainerHeight(): GridStack { if (this.engine.batchMode) { return this; } let row = this.getRow(); // checks for minRow already @@ -1161,6 +1148,7 @@ export class GridStack { return this; } + /** @internal */ private _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; if (!node || node._removeTimeout || !this.opts.removable) return this; @@ -1171,6 +1159,7 @@ export class GridStack { return this; } + /** @internal */ private _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; if (!node || !node._removeTimeout) return this; @@ -1181,7 +1170,7 @@ export class GridStack { return this; } - /** prepares the element for drag&drop **/ + /** @internal prepares the element for drag&drop **/ private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode): GridStack { // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth; @@ -1361,6 +1350,7 @@ export class GridStack { return this; } + /** @internal */ private _prepareElement(el: GridItemHTMLElement, triggerAddEvent = false): GridStack { el.classList.add(this.opts.itemClass); let node = this._readAttr(el, { el: el, _grid: this }); @@ -1371,7 +1361,7 @@ export class GridStack { return this; } - /** call to write x,y,w,h attributes back to element */ + /** @internal call to write x,y,w,h attributes back to element */ private _writeAttrs(el: HTMLElement, x?: number, y?: number, width?: number, height?: number): GridStack { if (x !== undefined && x !== null) { el.setAttribute('data-gs-x', String(x)); } if (y !== undefined && y !== null) { el.setAttribute('data-gs-y', String(y)); } @@ -1380,7 +1370,7 @@ export class GridStack { return this; } - /** call to write any default attributes back to element */ + /** @internal call to write any default attributes back to element */ private _writeAttr(el: HTMLElement, node: GridstackWidget): GridStack { if (!node) return this; this._writeAttrs(el, node.x, node.y, node.width, node.height); @@ -1418,7 +1408,7 @@ export class GridStack { return this; } - /** call to write any default attributes back to element */ + /** @internal call to write any default attributes back to element */ private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridstackWidget { node.x = Utils.toNumber(el.getAttribute('data-gs-x')); node.y = Utils.toNumber(el.getAttribute('data-gs-y')); @@ -1438,8 +1428,9 @@ export class GridStack { return node; } + /** @internal */ private _updateElement(els: GridStackElement, callback: (el: GridItemHTMLElement, node: GridStackNode) => void): GridStack { - let el = getElement(els); + let el = this.getElement(els); if (!el) { return this; } let node = el.gridstackNode; if (!node) { return this; } @@ -1456,6 +1447,7 @@ export class GridStack { return this; } + /** @internal */ private _setStaticClass(): GridStack { let staticClassName = 'grid-stack-static'; @@ -1468,7 +1460,7 @@ export class GridStack { } /** - * called when we are being resized - check if the one Column Mode needs to be turned on/off + * @internal called when we are being resized - check if the one Column Mode needs to be turned on/off * and remember the prev columns we used. */ private _onResizeHandler(): GridStack { @@ -1488,7 +1480,7 @@ export class GridStack { return this; } - /** called to setup a trash drop zone if the user specifies it */ + /** @internal called to setup a trash drop zone if the user specifies it */ private _setupRemoveDrop(): GridStack { if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { let trashZone = document.querySelector(this.opts.removable) as HTMLElement; @@ -1513,7 +1505,7 @@ export class GridStack { return this; } - /** called to add drag over support to support widgets */ + /** @internal called to add drag over support to support widgets */ private _setupAcceptWidget(): GridStack { if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; @@ -1647,8 +1639,42 @@ export class GridStack { return this; } + /** @internal */ + private getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { + return (typeof els === 'string' ? + (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); + } + /** @internal */ + private getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { + if (typeof els === 'string') { + let list = document.querySelectorAll(els); + if (!list.length) { list = document.querySelectorAll('.' + els) } + if (!list.length) { list = document.querySelectorAll('#' + els) } + return Array.from(list) as GridItemHTMLElement[]; + } + return [els]; + } + /** @internal */ + private static getGridElement(els: string | HTMLElement = '.grid-stack'): GridHTMLElement { + return (typeof els === 'string' ? + (document.querySelector(els) || document.querySelector('#' + els) || document.querySelector('.' + els)) : els); + } + /** @internal */ + private static getGridElements(els: string | HTMLElement = '.grid-stack'): GridHTMLElement[] { + if (typeof els === 'string') { + let list = document.querySelectorAll(els); + if (!list.length) { list = document.querySelectorAll('.' + els) } + if (!list.length) { list = document.querySelectorAll('#' + els) } + return Array.from(list) as GridHTMLElement[]; + } + return [els]; + } + // legacy method renames + /** @internal */ private setGridWidth = obsolete(this, GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); + /** @internal */ private setColumn = obsolete(this, GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); + /** @internal */ private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } diff --git a/src/index.ts b/src/index.ts index 05c221b21..add140972 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,13 +3,13 @@ /** * The package's root file. Exports all exported classes. */ -// import './gridstack-poly.js'; +import './gridstack-poly.js'; export * from './types'; export * from './utils'; export * from './gridstack-engine'; export * from './gridstack-dragdrop-plugin'; export * from './gridstack'; -export * from './jqueryui-gridstack-dragdrop-plugin'; +export * from './jq/jqueryui-gridstack-dragdrop-plugin'; -// declare module 'gridstack'; +// declare module 'gridstack'; for umd ? diff --git a/src/jquery-ui.js b/src/jq/jquery-ui.js similarity index 100% rename from src/jquery-ui.js rename to src/jq/jquery-ui.js diff --git a/src/jquery.js b/src/jq/jquery.js similarity index 100% rename from src/jquery.js rename to src/jq/jquery.js diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts similarity index 91% rename from src/jqueryui-gridstack-dragdrop-plugin.ts rename to src/jq/jqueryui-gridstack-dragdrop-plugin.ts index 0ae5b4f31..6dc3e5b0d 100644 --- a/src/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts @@ -6,9 +6,9 @@ * gridstack.js may be freely distributed under the MIT license. */ -import { GridStack } from './gridstack'; -import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback } from './gridstack-dragdrop-plugin'; -import { GridItemHTMLElement } from './types'; +import { GridStack } from '../gridstack'; +import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback } from '../gridstack-dragdrop-plugin'; +import { GridItemHTMLElement } from '../types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! // see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs @@ -84,7 +84,7 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDragDropPlugin { let $el: JQuery = $(el); - $el.on(name, (event, ui) => { callback(event, ui.draggable ? ui.draggable.get(0) : event.target) }); + $el.on(name, (event, ui) => { callback(event as any, ui.draggable ? ui.draggable.get(0) : event.target) }); return this; } diff --git a/src/types.ts b/src/types.ts index 4e08cd730..b3eaac936 100644 --- a/src/types.ts +++ b/src/types.ts @@ -16,16 +16,6 @@ export interface GridItemHTMLElement extends HTMLElement { _gridstackNodeOrig?: GridStackNode; } -/** generic event sent back from callbacks - extends Event in many cases, or bare when coming from drag&drop plugin */ -export interface GridEvent { - /** name of the event */ - type?: string; - /** DOM element this was fired for */ - target?: HTMLElement; - - [key: string]: any; -} - /** * Defines the options for a Grid */ diff --git a/webpack.config.js b/webpack.config.js index 1633f59a2..9050cc5e5 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,10 +4,7 @@ module.exports = { entry: { 'gridstack.all': './src/index.ts' }, - externals: { - // jquery: 'jQuery' - }, - mode: 'development', + mode: 'production', // vs development module: { rules: [ { From 1ce2c8682b696adb4d2e0e62515349259c32019b Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 10 Apr 2020 09:14:47 -0700 Subject: [PATCH 0205/1298] prevent removing another grid's item * fix #1250 --- doc/CHANGES.md | 1 + spec/gridstack-spec.ts | 40 ++++++++++++++++++++++++++++++++++++++-- src/gridstack.ts | 1 + 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index aef8ae0ff..5af045a40 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -36,6 +36,7 @@ Change log ## 1.1.1-dev (upcoming) - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode +- fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid - add `getGridItems()` to return list of HTML grid items ## 1.1.1 (2020-03-17) diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 3f647439d..cccfe77e4 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -8,10 +8,10 @@ describe('gridstack', function() { let gridHTML = '
    ' + '
    ' + - '
    ' + + '
    item 1
    ' + '
    ' + '
    ' + - '
    ' + + '
    item 2
    ' + '
    ' + '
    '; let gridstackHTML = @@ -1386,6 +1386,42 @@ describe('gridstack', function() { }); }); + describe('two grids', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridHTML); + document.body.insertAdjacentHTML('afterbegin', gridHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should not remove incorrect child', function() { + let grids = GridStack.initAll(); + expect(grids.length).toBe(2); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(2); + // should do nothing + grids[0].removeWidget( grids[1].engine.nodes[0].el ); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(2); + expect(grids[1].el.children.length).toBe(2); + // should empty with no errors + grids[1].removeAll(); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(0); + expect(grids[1].el.children.length).toBe(0); + }); + it('should remove 1 child', function() { + let grids = GridStack.initAll(); + grids[1].removeWidget( grids[1].engine.nodes[0].el ); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(1); + expect(grids[1].el.children.length).toBe(1); + }); + }); + describe('ddPlugin option', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); diff --git a/src/gridstack.ts b/src/gridstack.ts index 72c5b240f..bebad1afd 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -829,6 +829,7 @@ export class GridStack { */ public removeWidget(els: GridStackElement, detachNode?: boolean): GridStack { this.getElements(els).forEach(el => { + if (el.parentElement !== this.el) return; // not our child! let node = el.gridstackNode; // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272 if (!node) { From d9f94f2fd86800dab024fe8b888faa0104ed1161 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 10 Apr 2020 09:34:16 -0700 Subject: [PATCH 0206/1298] prevent removing another grid's item fix #1251 --- doc/CHANGES.md | 1 + spec/gridstack-spec.js | 36 ++++++++++++++++++++++++++++++++++++ src/gridstack.js | 1 + 3 files changed, 38 insertions(+) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 5ac9ffbe1..81197da2c 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -37,6 +37,7 @@ Change log - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) +- fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid ## 1.1.1 (2020-03-17) diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index 12f3d3968..9040f6839 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -1329,6 +1329,42 @@ describe('gridstack', function() { }); }); + describe('two grids', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('should not remove incorrect child', function() { + let grids = GridStack.initAll(); + expect(grids.length).toBe(2); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(2); + // should do nothing + grids[0].removeWidget( grids[1].engine.nodes[0].el ); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(2); + expect(grids[1].el.children.length).toBe(2); + // should empty with no errors + grids[1].removeAll(); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(0); + expect(grids[1].el.children.length).toBe(0); + }); + it('should remove 1 child', function() { + let grids = GridStack.initAll(); + grids[1].removeWidget( grids[1].engine.nodes[0].el ); + expect(grids[0].engine.nodes.length).toBe(2); + expect(grids[0].el.children.length).toBe(2); + expect(grids[1].engine.nodes.length).toBe(1); + expect(grids[1].el.children.length).toBe(1); + }); + }); + describe('grid.compact', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); diff --git a/src/gridstack.js b/src/gridstack.js index 98ec15884..b95812f9a 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1517,6 +1517,7 @@ if (!node) { node = this.engine.getNodeDataByDOMEl(el.get(0)); } + if (!node || node.el.parentElement !== this.el) return; // not our child! // remove our DOM data (circular link) and drag&drop permanently el.removeData('_gridstack_node'); this.dd.draggable(el, 'destroy').resizable(el, 'destroy'); From 1532d01f974dbddd85e346ae6e5a7553d8361ac1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 10 Apr 2020 18:28:53 -0700 Subject: [PATCH 0207/1298] TS: fix when dragging to delete and back introduced during the jquery-ui removal. --- package.json | 2 +- spec/gridstack-engine-spec.ts | 10 +++++----- src/gridstack-engine.ts | 11 ++++++----- src/gridstack.ts | 17 +++++++++-------- webpack.config.js | 2 +- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 74433aa46..d1ec5f8cc 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "yarn --no-progress && rm -rf dist/* && webpack && tsc --stripInternal && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md", "t": "tsc --stripInternal", - "web": "rm -rf dist/* && webpack", + "w": "webpack", "test": "yarn lint && karma start karma.conf.js", "lint": "tsc --noEmit && eslint src/*.ts", "reset": "rm -rf dist node_modules", diff --git a/spec/gridstack-engine-spec.ts b/spec/gridstack-engine-spec.ts index 79c78cc43..c2872f5b2 100644 --- a/spec/gridstack-engine-spec.ts +++ b/spec/gridstack-engine-spec.ts @@ -152,7 +152,7 @@ describe('gridstack engine', function() { }); beforeEach(function() { - engine.batchMode = false; + delete engine.batchMode; }); it('should return all dirty nodes', function() { @@ -187,8 +187,8 @@ describe('gridstack engine', function() { expect(engine.float).toEqual(true); engine.commit(); engine.commit(); - expect(engine.batchMode).toBeFalse(); - expect(engine.float).toEqual(false); + expect(engine.batchMode).not.toBeTrue(); + expect(engine.float).not.toBeTrue; }); it('should work on float grids', function() { @@ -197,7 +197,7 @@ describe('gridstack engine', function() { expect(engine.batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine.batchMode).toBeFalse(); + expect(engine.batchMode).not.toBeTrue(); expect(engine.float).toEqual(true); }); }); @@ -214,7 +214,7 @@ describe('gridstack engine', function() { expect(engine.batchMode).toBeTrue(); expect(engine.float).toEqual(true); engine.commit(); - expect(engine.batchMode).toBeFalse(); + expect(engine.batchMode).not.toBeTrue(); expect(engine.float).toEqual(true); }); }); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 39c16e6ef..297f44712 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -285,7 +285,7 @@ export class GridStackEngine { return this; } - public addNode(node: GridStackNode, triggerAddEvent?: boolean): GridStackNode { + public addNode(node: GridStackNode, triggerAddEvent = false): GridStackNode { node = this.prepareNode(node); node._id = node._id || GridStackEngine._idSeq++; @@ -320,9 +320,10 @@ export class GridStackEngine { return node; } - public removeNode(node: GridStackNode, detachNode?: boolean): GridStackEngine { - detachNode = (detachNode === undefined ? true : detachNode); - this.removedNodes.push(node); + public removeNode(node: GridStackNode, detachNode = true, triggerRemoveEvent = false): GridStackEngine { + if (triggerRemoveEvent) { + this.removedNodes.push(node); + } node._id = null; // hint that node is being removed this.nodes = this.nodes.filter(n => n !== node); this._packNodes(); @@ -459,7 +460,7 @@ export class GridStackEngine { public endUpdate(): GridStackEngine { let n = this.nodes.find(n => n._updating); if (n) { - n._updating = false; + delete n._updating; this.nodes.forEach(n => { delete n._packY; }); } return this; diff --git a/src/gridstack.ts b/src/gridstack.ts index bebad1afd..0f429c322 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -827,7 +827,7 @@ export class GridStack { * @param el widget or selector to modify * @param detachNode if false DOM node won't be removed from the tree (Default? true). */ - public removeWidget(els: GridStackElement, detachNode?: boolean): GridStack { + public removeWidget(els: GridStackElement, detachNode = true): GridStack { this.getElements(els).forEach(el => { if (el.parentElement !== this.el) return; // not our child! let node = el.gridstackNode; @@ -841,7 +841,7 @@ export class GridStack { delete el.gridstackNode; this.dd.draggable(el, 'destroy').resizable(el, 'destroy'); - this.engine.removeNode(node, detachNode); + this.engine.removeNode(node, detachNode, true); // true for trigger event }); this._triggerRemoveEvent(); this._triggerChangeEvent(); @@ -1165,9 +1165,9 @@ export class GridStack { let node = el.gridstackNode; if (!node || !node._removeTimeout) return this; clearTimeout(node._removeTimeout); - node._removeTimeout = null; + delete node._removeTimeout; el.classList.remove('grid-stack-item-removing'); - node._isAboutToRemove = false; + delete node._isAboutToRemove; return this; } @@ -1257,7 +1257,7 @@ export class GridStack { this._writeAttrs(this.placeholder, x, y, width, height); this.el.appendChild(this.placeholder); node.el = this.placeholder; - node._temporaryRemoved = false; + delete node._temporaryRemoved; } } } else if (event.type === 'resize') { @@ -1295,6 +1295,7 @@ export class GridStack { if (gridToNotify._gsEventHandler[event.type]) { gridToNotify._gsEventHandler[event.type](event, target); } + gridToNotify.engine.removedNodes.push(node); gridToNotify._triggerRemoveEvent(); delete el.gridstackNode; el.remove(); @@ -1308,7 +1309,7 @@ export class GridStack { this._writeAttrs(target, node._beforeDragX, node._beforeDragY, node.width, node.height); node.x = node._beforeDragX; node.y = node._beforeDragY; - node._temporaryRemoved = false; + delete node._temporaryRemoved; this.engine.addNode(node); } if (this._gsEventHandler[event.type]) { @@ -1475,7 +1476,7 @@ export class GridStack { this.column(1); } else { if (!this._oneColumnMode) { return this } - this._oneColumnMode = false; + delete this._oneColumnMode; this.column(this._prevColumn); } return this; @@ -1499,7 +1500,7 @@ export class GridStack { .on(trashZone, 'dropout', (event, el) => { let node = el.gridstackNode; if (!node || node._grid !== this) return; - el.dataset.inTrashZone = 'false'; + delete el.dataset.inTrashZone; this._clearRemovingTimeout(el); }); } diff --git a/webpack.config.js b/webpack.config.js index 137570146..c45c69fad 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,7 +4,7 @@ module.exports = { entry: { 'gridstack.all': './src/index.ts' }, - mode: 'production', // production vs development + mode: 'development', // production vs development module: { rules: [ { From d64391408be03be4d8880af05e5d049e0f30f9e2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 12 Apr 2020 09:07:22 -0700 Subject: [PATCH 0208/1298] TS: detachNode -> removeDOM rename and use typescript default value --- doc/CHANGES.md | 4 ++-- doc/README.md | 18 +++++++++--------- src/gridstack-engine.ts | 20 ++++++++++---------- src/gridstack.ts | 25 ++++++++++++------------- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index d1f0a7903..a46dd4c68 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -195,7 +195,7 @@ thanks [@ermcgrat](https://github.com/ermcgrat) and others for pointing out code - update requirements to the latest versions of jQuery (v3.1.0+) and jquery-ui (v1.12.0+). - fix jQuery `size()` ([#486](https://github.com/gridstack/gridstack.js/issues/486)). -- update `destroy([detachGrid])` call ([#422](https://github.com/gridstack/gridstack.js/issues/422)). +- update `destroy([removeDOM])` call ([#422](https://github.com/gridstack/gridstack.js/issues/422)). - don't mutate options when calling `draggable` and `resizable`. ([#505](https://github.com/gridstack/gridstack.js/issues/505)). - update _notify to allow detach ([#411](https://github.com/gridstack/gridstack.js/issues/411)). - fix code that checks for jquery-ui ([#481](https://github.com/gridstack/gridstack.js/issues/481)). @@ -217,7 +217,7 @@ thanks [@ermcgrat](https://github.com/ermcgrat) and others for pointing out code - add `setAnimation` method to API - add `column` method ([#227](https://github.com/gridstack/gridstack.js/issues/227)) - add `removable`/`removeTimeout` *(experimental)* -- add `detachGrid` parameter to `destroy` method ([#216](https://github.com/gridstack/gridstack.js/issues/216)) (thanks @jhpedemonte) +- add `removeDOM` parameter to `destroy` method ([#216](https://github.com/gridstack/gridstack.js/issues/216)) (thanks @jhpedemonte) - add `useOffset` parameter to `getCellFromPixel` method ([#237](https://github.com/gridstack/gridstack.js/issues/237)) - add `minWidth`, `maxWidth`, `minHeight`, `maxHeight`, `id` parameters to `addWidget` ([#188](https://github.com/gridstack/gridstack.js/issues/188)) - add `added` and `removed` events for when a widget is added or removed, respectively. ([#54](https://github.com/gridstack/gridstack.js/issues/54)) diff --git a/doc/README.md b/doc/README.md index 2107d80a7..4e83a5b0f 100644 --- a/doc/README.md +++ b/doc/README.md @@ -28,7 +28,7 @@ gridstack.js API - [cellWidth()](#cellwidth) - [commit()](#commit) - [column(column, doNotPropagate)](#columncolumn-donotpropagate) - - [destroy([detachGrid])](#destroydetachgrid) + - [destroy([removeDOM])](#destroyremovedom) - [disable()](#disable) - [enable()](#enable) - [enableMove(doEnable, includeNewWidgets)](#enablemovedoenable-includenewwidgets) @@ -45,8 +45,8 @@ gridstack.js API - [minWidth(el, val)](#minwidthel-val) - [movable(el, val)](#movableel-val) - [move(el, x, y)](#moveel-x-y) - - [removeWidget(el[, detachNode])](#removewidgetel-detachnode) - - [removeAll([detachNode])](#removealldetachnode) + - [removeWidget(el[, removeDOM])](#removewidgetel-removedom) + - [removeAll([removeDOM])](#removeallremovedom) - [resize(el, width, height)](#resizeel-width-height) - [resizable(el, val)](#resizableel-val) - [setAnimation(doAnimate)](#setanimationdoanimate) @@ -295,13 +295,13 @@ else you will need to generate correct CSS (see https://github.com/gridstack/gri - `column` - Integer > 0 (default 12), if missing it will return the current count instead. - `doNotPropagate` - if true existing widgets will not be updated during a set. -### destroy([detachGrid]) +### destroy([removeDOM]) Destroys a grid instance. Parameters: -- `detachGrid` - if `false` nodes and grid will not be removed from the DOM (Optional. Default `true`). +- `removeDOM` - if `false` nodes and grid will not be removed from the DOM (Optional. Default `true`). ### disable() @@ -431,22 +431,22 @@ Parameters: - `el` - widget to move - `x`, `y` - new position. If value is `null` or `undefined` it will be ignored. -### removeWidget(el[, detachNode]) +### removeWidget(el[, removeDOM]) Removes widget from the grid. Parameters: - `el` - widget to remove. -- `detachNode` - if `false` node won't be removed from the DOM (Optional. Default `true`). +- `removeDOM` - if `false` node won't be removed from the DOM (Optional. Default `true`). -### removeAll([detachNode]) +### removeAll([removeDOM]) Removes all widgets from the grid. Parameters: -- `detachNode` - if `false` nodes won't be removed from the DOM (Optional. Default `true`). +- `removeDOM` - if `false` nodes won't be removed from the DOM (Optional. Default `true`). ### resize(el, width, height) diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 297f44712..8dcaa7be5 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -9,7 +9,7 @@ import { Utils, obsolete } from './utils'; import { GridStackNode } from './types'; -export type onChangeCB = (nodes: GridStackNode[], detachNode?: boolean) => void; +export type onChangeCB = (nodes: GridStackNode[], removeDOM?: boolean) => void; /** * Defines the GridStack engine that does most no DOM grid manipulation. @@ -268,13 +268,12 @@ export class GridStackEngine { } /** @internal */ - private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean): GridStackEngine { + private _notify(nodes?: GridStackNode | GridStackNode[], removeDOM = true): GridStackEngine { if (this.batchMode) { return this } - detachNode = (detachNode === undefined ? true : detachNode); nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) ); let dirtyNodes = nodes.concat(this.getDirtyNodes()); if (this.onchange) { - this.onchange(dirtyNodes, detachNode); + this.onchange(dirtyNodes, removeDOM); } return this; } @@ -320,25 +319,26 @@ export class GridStackEngine { return node; } - public removeNode(node: GridStackNode, detachNode = true, triggerRemoveEvent = false): GridStackEngine { + public removeNode(node: GridStackNode, removeDOM = true, triggerRemoveEvent = false): GridStackEngine { if (triggerRemoveEvent) { this.removedNodes.push(node); } node._id = null; // hint that node is being removed this.nodes = this.nodes.filter(n => n !== node); this._packNodes(); - this._notify(node, detachNode); + this._notify(node, removeDOM); return this; } - public removeAll(detachNode?: boolean): GridStackEngine { + public removeAll(removeDOM = true): GridStackEngine { delete this._layouts; if (this.nodes.length === 0) { return this } - detachNode = (detachNode === undefined ? true : detachNode); - this.nodes.forEach(n => { n._id = null; }); // hint that node is being removed + if (removeDOM) { + this.nodes.forEach(n => { n._id = null; }); // hint that node is being removed + } this.removedNodes = this.nodes; this.nodes = []; - this._notify(this.removedNodes, detachNode); + this._notify(this.removedNodes, removeDOM); return this; } diff --git a/src/gridstack.ts b/src/gridstack.ts index 0f429c322..e72d67e43 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -242,13 +242,12 @@ export class GridStack { this._initStyles(); - this.engine = new GridStackEngine(this.opts.column, (cbNodes, detachNode) => { - detachNode = (detachNode === undefined ? true : detachNode); + this.engine = new GridStackEngine(this.opts.column, (cbNodes, removeDOM = true) => { let maxHeight = 0; this.engine.nodes.forEach(n => { maxHeight = Math.max(maxHeight, n.y + n.height) }); cbNodes.forEach(n => { let el = n.el; - if (detachNode && n._id === null) { + if (removeDOM && n._id === null) { if (el && el.parentNode) { el.parentNode.removeChild(el) } } else { this._writeAttrs(el, n.x, n.y, n.width, n.height); @@ -466,13 +465,13 @@ export class GridStack { /** * Destroys a grid instance. - * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true). + * @param removeDOM if `false` grid and items elements will not be removed from the DOM (Optional. Default `true`). */ - public destroy(detachGrid = true): GridStack { + public destroy(removeDOM = true): GridStack { window.removeEventListener('resize', this._onResizeHandler); this.disable(); - if (!detachGrid) { - this.removeAll(false); + if (!removeDOM) { + this.removeAll(removeDOM); this.el.classList.remove(this.opts._class); delete this.el.gridstack; } else { @@ -825,9 +824,9 @@ export class GridStack { /** * Removes widget from the grid. * @param el widget or selector to modify - * @param detachNode if false DOM node won't be removed from the tree (Default? true). + * @param removeDOM if `false` DOM element won't be removed from the tree (Default? true). */ - public removeWidget(els: GridStackElement, detachNode = true): GridStack { + public removeWidget(els: GridStackElement, removeDOM = true): GridStack { this.getElements(els).forEach(el => { if (el.parentElement !== this.el) return; // not our child! let node = el.gridstackNode; @@ -841,7 +840,7 @@ export class GridStack { delete el.gridstackNode; this.dd.draggable(el, 'destroy').resizable(el, 'destroy'); - this.engine.removeNode(node, detachNode, true); // true for trigger event + this.engine.removeNode(node, removeDOM, true); // true for trigger event }); this._triggerRemoveEvent(); this._triggerChangeEvent(); @@ -850,15 +849,15 @@ export class GridStack { /** * Removes all widgets from the grid. - * @param detachNode if false DOM nodes won't be removed from the tree (Default? true). + * @param removeDOM if `false` DOM elements won't be removed from the tree (Default? `true`). */ - public removeAll(detachNode?: boolean): GridStack { + public removeAll(removeDOM = true): GridStack { // always remove our DOM data (circular link) before list gets emptied and drag&drop permanently this.engine.nodes.forEach(n => { delete n.el.gridstackNode; this.dd.draggable(n.el, 'destroy').resizable(n.el, 'destroy'); }); - this.engine.removeAll(detachNode); + this.engine.removeAll(removeDOM); this._triggerRemoveEvent(); return this; } From 5418a61191169652b73ee3b4e4b3c54e9b1a6629 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 12 Apr 2020 23:16:00 -0700 Subject: [PATCH 0209/1298] TS: doc/types cleanup * GridStackNode.grid is not hidden (was _grid) * doc updated to hide more private members --- src/gridstack.ts | 20 ++++++++++---------- src/types.ts | 29 ++++++++++++++++++++++++++--- src/utils.ts | 2 +- webpack.config.js | 2 +- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index e72d67e43..5f88b4994 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1024,8 +1024,8 @@ export class GridStack { return this; } - // @internal eslint-disable-next-line @typescript-eslint/no-explicit-any - private _triggerEvent(name: string, data?: any): GridStack { + /** @internal */ + private _triggerEvent(name: string, data?: GridStackNode[]): GridStack { let event = data ? new CustomEvent(name, {bubbles: false, detail: data}) : new Event(name); this.el.dispatchEvent(event); return this; @@ -1290,7 +1290,7 @@ export class GridStack { node.el = target; if (node._isAboutToRemove) { - let gridToNotify = el.gridstackNode._grid; + let gridToNotify = el.gridstackNode.grid; if (gridToNotify._gsEventHandler[event.type]) { gridToNotify._gsEventHandler[event.type](event, target); } @@ -1354,7 +1354,7 @@ export class GridStack { /** @internal */ private _prepareElement(el: GridItemHTMLElement, triggerAddEvent = false): GridStack { el.classList.add(this.opts.itemClass); - let node = this._readAttr(el, { el: el, _grid: this }); + let node = this._readAttr(el, { el: el, grid: this }); node = this.engine.addNode(node, triggerAddEvent); el.gridstackNode = node; @@ -1492,13 +1492,13 @@ export class GridStack { this.dd .on(trashZone, 'dropover', (event, el) => { let node = el.gridstackNode; - if (!node || node._grid !== this) return; + if (!node || node.grid !== this) return; el.dataset.inTrashZone = 'true'; this._setupRemovingTimeout(el); }) .on(trashZone, 'dropout', (event, el) => { let node = el.gridstackNode; - if (!node || node._grid !== this) return; + if (!node || node.grid !== this) return; delete el.dataset.inTrashZone; this._clearRemovingTimeout(el); }); @@ -1543,7 +1543,7 @@ export class GridStack { .droppable(this.el, { accept: (el: GridItemHTMLElement) => { let node: GridStackNode = el.gridstackNode; - if (node && node._grid === this) { + if (node && node.grid === this) { return false; } if (typeof this.opts.acceptWidgets === 'function') { @@ -1604,7 +1604,7 @@ export class GridStack { } let node: GridStackNode = _el.gridstackNode; this.engine.cleanupNode(node); - node._grid = this; + node.grid = this; let originalNode = _el._gridstackNodeOrig; delete _el.gridstackNode; delete _el._gridstackNodeOrig; @@ -1616,8 +1616,8 @@ export class GridStack { let el = _el.cloneNode(true) as GridItemHTMLElement; el.gridstackNode = node; - if (originalNode && originalNode._grid) { - originalNode._grid._triggerRemoveEvent(); + if (originalNode && originalNode.grid) { + originalNode.grid._triggerRemoveEvent(); } _el.remove(); node.el = el; diff --git a/src/types.ts b/src/types.ts index b3eaac936..f94b0579a 100644 --- a/src/types.ts +++ b/src/types.ts @@ -11,7 +11,8 @@ import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin'; export type numberOrString = number | string; export interface GridItemHTMLElement extends HTMLElement { - gridstackNode?: GridStackNode; // grid items point back to node + /** pointer to grid node instance */ + gridstackNode?: GridStackNode; /** @internal */ _gridstackNodeOrig?: GridStackNode; } @@ -223,28 +224,50 @@ export interface DDDragOpt { * internal descriptions describing the items in the grid */ export interface GridStackNode extends GridstackWidget { + /** pointer back to HTML element */ el?: GridItemHTMLElement; - /** @internal need to do that for each and use --stripInternal */ + /** pointer back to Grid instance */ + grid?: GridStack; + /** @internal */ _id?: number; - _grid?: GridStack; + /** @internal */ _dirty?: boolean; + /** @internal */ _updating?: boolean; + /** @internal */ _added?: boolean; + /** @internal */ _temporary?: boolean; + /** @internal */ _isOutOfGrid?: boolean; + /** @internal */ _origX?: number; + /** @internal */ _origY?: number; + /** @internal */ _packY?: number; + /** @internal */ _origW?: number; + /** @internal */ _origH?: number; + /** @internal */ _lastTriedX?: number; + /** @internal */ _lastTriedY?: number; + /** @internal */ _lastTriedWidth?: number; + /** @internal */ _lastTriedHeight?: number; + /** @internal */ _isAboutToRemove?: boolean; + /** @internal */ _removeTimeout?: number; + /** @internal */ _beforeDragX?: number; + /** @internal */ _beforeDragY?: number; + /** @internal */ _prevYPix?: number; + /** @internal */ _temporaryRemoved?: boolean; } diff --git a/src/utils.ts b/src/utils.ts index 894b951f5..ec0de67af 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -216,7 +216,7 @@ export class Utils { return returnEl; } - /** @private */ + /** @internal */ static updateScrollPosition(el: HTMLElement, position: {top: number}, distance: number) { // is widget in view? let rect = el.getBoundingClientRect(); diff --git a/webpack.config.js b/webpack.config.js index c45c69fad..137570146 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -4,7 +4,7 @@ module.exports = { entry: { 'gridstack.all': './src/index.ts' }, - mode: 'development', // production vs development + mode: 'production', // production vs development module: { rules: [ { From ab271140efae180aef792c640442959c7743bac1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 12 Apr 2020 23:54:26 -0700 Subject: [PATCH 0210/1298] TS: types any cleanup * fixed many (some remain) of `noImplicitAny=true` case --- src/gridstack-dragdrop-plugin.ts | 7 ++++--- src/gridstack-engine.ts | 4 ++-- src/gridstack.ts | 22 ++++++++++---------- src/jq/jqueryui-gridstack-dragdrop-plugin.ts | 8 +++---- src/utils.ts | 6 ++++-- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 0d2df6f47..6521c7534 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -20,6 +20,7 @@ export type DDDropOpt = { // eslint-disable-next-line @typescript-eslint/no-explicit-any export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | {} | any; export type DDKey = 'minWidth' | 'minHeight' | string; +export type DDValue = number | string; /** drag&drop events callbacks */ export type DDCallback = (event: Event, arg2: GridItemHTMLElement) => void; @@ -39,15 +40,15 @@ export class GridStackDragDropPlugin { this.grid = grid; } - public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { return this; } - public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { return this; } - public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?): GridStackDragDropPlugin { + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { return this; } diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 8dcaa7be5..d9dd41268 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -251,7 +251,7 @@ export class GridStackEngine { public getDirtyNodes(verify?: boolean): GridStackNode[] { // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state if (verify) { - let dirtNodes = []; + let dirtNodes: GridStackNode[] = []; this.nodes.forEach(n => { if (n._dirty) { if (n.y === n._origY && n.x === n._origX && n.width === n._origW && n.height === n._origH) { @@ -352,7 +352,7 @@ export class GridStackEngine { return true; } - let clonedNode; + let clonedNode: GridStackNode; let clone = new GridStackEngine( this.column, null, diff --git a/src/gridstack.ts b/src/gridstack.ts index 5f88b4994..84708dc9b 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -460,7 +460,7 @@ export class GridStack { /** returns an array of grid HTML elements (no placeholder) - used internally to iterate through our children */ public getGridItems(): GridItemHTMLElement[] { return Array.from(this.el.children) - .filter(el => el.matches('.' + this.opts.itemClass) && !el.matches('.' + this.opts.placeholderClass)) as GridItemHTMLElement[]; + .filter((el: HTMLElement) => el.matches('.' + this.opts.itemClass) && !el.matches('.' + this.opts.placeholderClass)) as GridItemHTMLElement[]; } /** @@ -781,9 +781,9 @@ export class GridStack { let noData = (name === 'enable' || name === 'disable'); this._gsEventHandler = this._gsEventHandler || {}; if (noData) { - this._gsEventHandler[name] = (event) => callback(event); + this._gsEventHandler[name] = (event: Event) => callback(event); } else { - this._gsEventHandler[name] = (event) => callback(event, event.detail); + this._gsEventHandler[name] = (event: CustomEvent) => callback(event, event.detail); } this.el.addEventListener(name, this._gsEventHandler[name]); } else if (name === 'dragstart' || name === 'dragstop' || name === 'resizestart' || name === 'resizestop' || name === 'dropped') { @@ -1071,11 +1071,11 @@ export class GridStack { let margin = this.opts.verticalMargin as number; if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - getHeight = (nbRows, nbMargins) => { + getHeight = (nbRows: number, nbMargins: number) => { return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; } } else { - getHeight = (nbRows, nbMargins) => { + getHeight = (nbRows: number, nbMargins: number) => { if (!nbRows || !nbMargins) { return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; } @@ -1173,8 +1173,8 @@ export class GridStack { /** @internal prepares the element for drag&drop **/ private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode): GridStack { // variables used/cashed between the 3 start/move/end methods, in addition to node passed above - let cellWidth; - let cellFullHeight; // internal cellHeight + v-margin + let cellWidth: number; + let cellFullHeight: number; // internal cellHeight + v-margin /** called when item starts moving/resizing */ let onStartMoving = (event, ui) => { @@ -1220,7 +1220,7 @@ export class GridStack { } /** called when item is being dragged/resized */ - let dragOrResize = (event, ui) => { + let dragOrResize = (event: Event, ui) => { let x = Math.round(ui.position.left / cellWidth); let y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight); let width; @@ -1281,8 +1281,8 @@ export class GridStack { } /** called when the item stops moving/resizing */ - let onEndMoving = (event) => { - let { target } = event; + let onEndMoving = (event: Event) => { + let target: GridItemHTMLElement = event.target as GridItemHTMLElement; if (!target.gridstackNode) return; // let forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ? @@ -1323,7 +1323,7 @@ export class GridStack { // if we re-sized a nested grid item, let the children resize as well if (event.type === 'resizestop') { - target.querySelectorAll('.grid-stack').forEach(el => el.gridstack._onResizeHandler()); + target.querySelectorAll('.grid-stack').forEach((el: GridHTMLElement) => el.gridstack._onResizeHandler()); } } diff --git a/src/jq/jqueryui-gridstack-dragdrop-plugin.ts b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts index 6dc3e5b0d..06d297157 100644 --- a/src/jq/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts @@ -7,7 +7,7 @@ */ import { GridStack } from '../gridstack'; -import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback } from '../gridstack-dragdrop-plugin'; +import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dragdrop-plugin'; import { GridItemHTMLElement } from '../types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! @@ -23,7 +23,7 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { super(grid); } - public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { let $el: JQuery = $(el); if (opts === 'disable' || opts === 'enable') { $el.resizable(opts); @@ -44,7 +44,7 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return this; } - public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin { + public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { let $el: JQuery = $(el); if (opts === 'disable' || opts === 'enable') { $el.draggable(opts); @@ -66,7 +66,7 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return this; } - public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?): GridStackDragDropPlugin { + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { let $el: JQuery = $(el); if (typeof opts.accept === 'function' && !opts._accept) { // convert jquery event to generic element diff --git a/src/utils.ts b/src/utils.ts index ec0de67af..f39846c3e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -173,7 +173,8 @@ export class Utils { return Utils.closestByClass(el, name); } - static throttle(callback, delay) { + /** @internal */ + static throttle(callback: () => void, delay: number) { let isWaiting = false; return function (...args) { @@ -204,7 +205,8 @@ export class Utils { } } - static getScrollParent(el: HTMLElement) { + /** @internal */ + static getScrollParent(el: HTMLElement): HTMLElement { let returnEl; if (el === null) { returnEl = null; From 59dcb470b8c6adfaf3c10403165e3aae847cd641 Mon Sep 17 00:00:00 2001 From: petebytes Date: Mon, 13 Apr 2020 23:41:28 -0700 Subject: [PATCH 0211/1298] Corrected makeWidget sample code Corrected makeWidget sample code and tested in codepen --- doc/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/README.md b/doc/README.md index c2c4446f1..8312bfd54 100644 --- a/doc/README.md +++ b/doc/README.md @@ -385,8 +385,8 @@ Parameters: ```js var grid = GridStack.init(); -grid.el.appendChild('
    ') -grid.makeWidget('gsi-1'); +grid.el.appendChild('
    ') +grid.makeWidget('#gsi-1'); ``` ### maxHeight(el, val) From 5b7f023a4950483f2eb9f203628081a37272e5bd Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 16 Apr 2020 08:22:15 -0700 Subject: [PATCH 0212/1298] TS: clone grid option fix #1261 * also fixed karma-typescript to get line number again --- doc/CHANGES.md | 1 + package.json | 2 +- src/gridstack.ts | 30 +- yarn.lock | 705 ++++++++++++++++++++++++----------------------- 4 files changed, 374 insertions(+), 364 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index a46dd4c68..69a2a11e0 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -43,6 +43,7 @@ Change log - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) - fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid +- fix [1261](https://github.com/gridstack/gridstack.js/issues/1261) `init()` clones passed options so second doesn't affect first one ## 1.1.1 (2020-03-17) diff --git a/package.json b/package.json index d1ec5f8cc..e692cacae 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "karma-chrome-launcher": "^3.1.0", "karma-cli": "^2.0.0", "karma-jasmine": "^3.1.1", - "karma-typescript": "^5.0.1", + "karma-typescript": "4.1.1", "node-sass": "^4.13.1", "puppeteer": "^2.1.1", "serve-static": "^1.14.1", diff --git a/src/gridstack.ts b/src/gridstack.ts index 84708dc9b..c4171ba03 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -72,7 +72,7 @@ export class GridStack { return null; } if (!el.gridstack) { - el.gridstack = new GridStack(el, options); + el.gridstack = new GridStack(el, Utils.clone(options)); } return el.gridstack } @@ -152,14 +152,11 @@ export class GridStack { obsoleteAttr(this.el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3'); obsoleteAttr(this.el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0'); - opts.itemClass = opts.itemClass || 'grid-stack-item'; - // if row property exists, replace minRow and maxRow instead if (opts.row) { opts.minRow = opts.maxRow = opts.row; delete opts.row; } - let rowAttr = Utils.toNumber(el.getAttribute('data-gs-row')); // elements attributes override any passed options (like CSS style) - merge the two together @@ -180,29 +177,28 @@ export class GridStack { staticGrid: false, _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0), animate: Utils.toBool(el.getAttribute('data-gs-animate')) || false, - alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false, - resizable: Utils.defaults(opts.resizable || {}, { + alwaysShowResizeHandle: false, + resizable: { autoHide: !(opts.alwaysShowResizeHandle || false), handles: 'se' - }), - draggable: Utils.defaults(opts.draggable || {}, { - handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || - '.grid-stack-item-content', + }, + draggable: { + handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) || '.grid-stack-item-content', scroll: false, appendTo: 'body' - }), - disableDrag: opts.disableDrag || false, - disableResize: opts.disableResize || false, + }, + disableDrag: false, + disableResize: false, rtl: 'auto', removable: false, - removableOptions: Utils.defaults(opts.removableOptions || {}, { + removableOptions: { accept: '.' + opts.itemClass - }), + }, removeTimeout: 2000, verticalMarginUnit: 'px', cellHeightUnit: 'px', - disableOneColumnMode: opts.disableOneColumnMode || false, - oneColumnModeDomSort: opts.oneColumnModeDomSort + disableOneColumnMode: false, + oneColumnModeDomSort: false }; this.opts = Utils.defaults(opts, defaults); diff --git a/yarn.lock b/yarn.lock index 65d48c8f8..a11d9cda3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,76 +2,13 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": +"@babel/code-frame@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: "@babel/highlight" "^7.8.3" -"@babel/core@^7.7.5": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.7.tgz#b69017d221ccdeb203145ae9da269d72cf102f3b" - integrity sha512-rBlqF3Yko9cynC5CCFy6+K/w2N+Sq/ff2BPy+Krp7rHlABIr5epbA7OxVeKoMHB39LZOp1UY5SuLjy6uWi35yA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.7" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.7" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.7" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.8.6", "@babel/generator@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.8.tgz#cdcd58caab730834cee9eeadb729e833b625da3e" - integrity sha512-HKyUVu69cZoclptr8t8U5b6sx6zoWjh8jiUhnuj3MpZuKT2dJ8zPTuiy31luq32swhI0SpwItCIlU8XW7BZeJg== - dependencies: - "@babel/types" "^7.8.7" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - "@babel/highlight@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" @@ -81,72 +18,6 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.8.7": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.8.tgz#4c3b7ce36db37e0629be1f0d50a571d2f86f6cd4" - integrity sha512-mO5GWzBPsPf6865iIbzNE0AvkKF3NE+2S3eRUpE+FE07BOAkXh6G+GW/Pj01hhXjve1WScbaIO4UlY1JKeqCcA== - -"@babel/parser@^7.8.3": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== - -"@babel/template@^7.7.4", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/template@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" - integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/traverse@^7.7.4", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.6.tgz#acfe0c64e1cd991b3e32eae813a6eb564954b5ff" - integrity sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.6" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" - integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@babel/types@^7.8.6", "@babel/types@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.7.tgz#1fc9729e1acbb2337d5b6977a63979b4819f5d1d" - integrity sha512-k2TreEHxFA4CjGkL+GYjRyx35W0Mr7DP5+9q6WMkyKXB+904bYmG40syjMFV0oLlhhFCwWl0vA0DyzTDkwAiJw== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - "@textlint/ast-node-types@^4.0.3": version "4.2.5" resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.5.tgz#ae13981bc8711c98313a6ac1c361194d6bf2d39b" @@ -418,6 +289,11 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= + accepts@~1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -431,12 +307,12 @@ acorn-jsx@^5.1.0: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== -acorn-walk@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" - integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== +acorn-walk@^6.1.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -acorn@^6.2.1: +acorn@^6.0.5, acorn@^6.2.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -500,6 +376,13 @@ anchor-markdown-header@^0.5.5: dependencies: emoji-regex "~6.1.0" +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== + dependencies: + ansi-wrap "^0.1.0" + ansi-escapes@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" @@ -539,6 +422,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -703,6 +591,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@1.x, async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.6.0, async@^2.6.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -715,11 +608,6 @@ async@^3.0.1: resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== -async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1037,10 +925,10 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.4.3: - version "5.5.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" - integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== +buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1402,7 +1290,7 @@ connect@^3.6.0, connect@^3.6.6, connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -console-browserify@^1.1.0, console-browserify@^1.2.0: +console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== @@ -1427,7 +1315,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.7.0: +convert-source-map@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -1573,17 +1461,12 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-format@^2.0.0, date-format@^2.1.0: +date-format@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== -date-format@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" - integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== - -dateformat@~1.0.12: +dateformat@^1.0.6, dateformat@~1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= @@ -1641,7 +1524,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.3: +define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1772,16 +1655,11 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -domain-browser@^1.1.1: +domain-browser@^1.1.1, domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domain-browser@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-3.5.0.tgz#3a11f5df52fd9d60d7f1c79a62fde2d158c42b09" - integrity sha512-zrzUu6auyZWRexjCEPJnfWc30Hupxh2lJZOJAF3qa2bCuD4O/55t0FvQt3ZMhEw++gjNkwdkOVZh8yA32w/Vfw== - domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -1979,6 +1857,32 @@ error@^7.0.0: dependencies: string-template "~0.2.1" +es-abstract@^1.17.5: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es6-object-assign@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" @@ -2006,6 +1910,18 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -2086,6 +2002,11 @@ espree@^6.1.2: acorn-jsx "^5.1.0" eslint-visitor-keys "^1.1.0" +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2105,6 +2026,11 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= + estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -2428,7 +2354,7 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" -flatted@^2.0.0, flatted@^2.0.1: +flatted@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== @@ -2508,15 +2434,6 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -2555,6 +2472,11 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -2581,11 +2503,6 @@ gaze@^1.0.0, gaze@^1.1.0: dependencies: globule "^1.0.0" -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2640,26 +2557,26 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob@^5.0.15, glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: - fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" -glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2711,11 +2628,6 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^12.1.0: version "12.3.0" resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" @@ -2744,7 +2656,7 @@ globule@^1.0.0: lodash "~4.17.12" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -2917,6 +2829,18 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" +handlebars@^4.0.1: + version "4.7.6" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -2949,15 +2873,20 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-unicode@^2.0.0: version "2.0.1" @@ -2995,6 +2924,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -3037,11 +2973,6 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== -html-escaper@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" - integrity sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig== - htmlparser2@~3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -3343,6 +3274,11 @@ is-buffer@^1.1.4, is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3357,6 +3293,11 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" @@ -3505,6 +3446,13 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" @@ -3517,6 +3465,13 @@ is-stream@^1.1.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3593,49 +3548,25 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" - integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== - dependencies: - "@babel/core" "^7.7.5" - "@babel/parser" "^7.7.5" - "@babel/template" "^7.7.4" - "@babel/traverse" "^7.7.4" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" - integrity sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" +istanbul@0.4.5, istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" jasmine-core@^3.5.0: version "3.5.0" @@ -3671,7 +3602,7 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1, js-yaml@~3.13.0: +js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -3684,11 +3615,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3721,13 +3647,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" - integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== - dependencies: - minimist "^1.2.0" - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3769,6 +3688,17 @@ karma-cli@^2.0.0: dependencies: resolve "^1.3.3" +karma-coverage@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" + integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^4.17.0" + minimatch "^3.0.0" + source-map "^0.5.1" + karma-jasmine@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.1.1.tgz#f592b253e7619a8d84559d7daf473a647498ade8" @@ -3776,36 +3706,33 @@ karma-jasmine@^3.1.1: dependencies: jasmine-core "^3.5.0" -karma-typescript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.0.1.tgz#9caf1bc4aa416c8860ed32f8e452397472d7fb64" - integrity sha512-/AqfeOODqqtB145Lm3Kbx8o05BXxSgSS7WckxYgehkz1oA0/9pdpGRm8VlMqI7UXoLg/YrpZoIztIxpL7Jls/w== +karma-typescript@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-4.1.1.tgz#2b37164e31f23397cf35774fb436e3a7e7f78a29" + integrity sha512-NiGt3Lh8pxKY6hSW4mBV7X45zfB+EA4ezVMNN/vnzLvN+du0UoEc8lTAhrD/DMrjKP3wDlpabku652svRyguXg== dependencies: - acorn "^7.1.0" - acorn-walk "^7.0.0" + acorn "^6.0.5" + acorn-walk "^6.1.1" assert "^2.0.0" async "^3.0.1" browser-resolve "^1.11.3" browserify-zlib "^0.2.0" - buffer "^5.4.3" + buffer "^5.2.1" combine-source-map "^0.8.0" - console-browserify "^1.2.0" + console-browserify "^1.1.0" constants-browserify "^1.0.0" - convert-source-map "^1.7.0" + convert-source-map "^1.6.0" crypto-browserify "^3.12.0" diff "^4.0.1" - domain-browser "^3.5.0" + domain-browser "^1.2.0" events "^3.0.0" - glob "^7.1.6" + glob "^7.1.3" https-browserify "^1.0.0" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.0" + istanbul "0.4.5" json-stringify-safe "^5.0.1" - lodash "^4.17.15" - log4js "^6.1.0" + karma-coverage "^1.1.1" + lodash "^4.17.11" + log4js "^4.0.1" minimatch "^3.0.4" os-browserify "^0.3.0" pad "^3.2.0" @@ -3814,16 +3741,17 @@ karma-typescript@^5.0.1: punycode "^2.1.1" querystring-es3 "^0.2.1" readable-stream "^3.1.1" + remap-istanbul "^0.13.0" source-map "^0.7.3" stream-browserify "^2.0.2" - stream-http "^3.1.0" - string_decoder "^1.3.0" - timers-browserify "^2.0.11" + stream-http "^3.0.0" + string_decoder "^1.2.0" + timers-browserify "^2.0.10" tmp "^0.1.0" tty-browserify "^0.0.1" url "^0.11.0" - util "^0.12.1" - vm-browserify "^1.1.2" + util "^0.12.0" + vm-browserify "1.1.0" karma@^4.4.1: version "4.4.1" @@ -3986,7 +3914,7 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.12, lodash@~4.17.5: +lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.12, lodash@~4.17.5: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -3996,7 +3924,7 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log4js@^4.0.0: +log4js@^4.0.0, log4js@^4.0.1: version "4.5.1" resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== @@ -4007,17 +3935,6 @@ log4js@^4.0.0: rfdc "^1.1.4" streamroller "^1.0.6" -log4js@^6.1.0: - version "6.1.2" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.1.2.tgz#04688e1f4b8080c127b7dccb0db1c759cbb25dc4" - integrity sha512-knS4Y30pC1e0n7rfx3VxcLOdBCsEo0o6/C7PVTGxdVK+5b1TYOSGQPn9FDcrhkoQBV29qwmA2mtkznPAQKnxQg== - dependencies: - date-format "^3.0.0" - debug "^4.1.1" - flatted "^2.0.1" - rfdc "^1.1.4" - streamroller "^2.2.3" - loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" @@ -4049,13 +3966,6 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== - dependencies: - semver "^6.0.0" - make-iterator@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" @@ -4234,7 +4144,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -4251,6 +4161,11 @@ minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.2.tgz#b00a00230a1108c48c169e69a291aafda3aacd63" integrity sha512-rIqbOrKb8GJmx/5bc2M0QchhUouMXSpd1RTclXsB41JdL+VtnojfaJR+h7F9k18/4kHUsBFgk80Uk+q569vjPA== +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -4287,6 +4202,13 @@ mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" +mkdirp@0.5.x: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + morgan@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" @@ -4362,7 +4284,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -4456,7 +4378,7 @@ node-sass@^4.13.1: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@2 || 3", nopt@~3.0.6: +"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -4539,12 +4461,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" + integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" -object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -4556,6 +4486,16 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -4593,7 +4533,7 @@ on-headers@~1.0.1: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -4622,7 +4562,7 @@ optimist@^0.6.1, optimist@~0.6.0: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.3: +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -4927,6 +4867,16 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" +plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== + dependencies: + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" + portscanner@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1" @@ -5189,7 +5139,7 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1: +"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -5247,6 +5197,17 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== +remap-istanbul@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.13.0.tgz#a529dfd080bb760f5274e3671c9c065f29923ed1" + integrity sha512-rS5ZpVAx3fGtKZkiBe1esXg5mKYbgW9iz8kkADFt3p6lo3NsBBUX1q6SwdhwUtYCGnr7nK6gRlbYK3i8R0jbRA== + dependencies: + istanbul "0.4.5" + minimatch "^3.0.4" + plugin-error "^1.0.1" + source-map "0.6.1" + through2 "3.0.0" + remark-frontmatter@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz#91d9684319cd1b96cc3d9d901f10a978f39c752d" @@ -5379,12 +5340,12 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@~1.1.0: +resolve@1.1.7, resolve@1.1.x, resolve@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.3.3: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.3: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -5528,7 +5489,7 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: tmp "0.0.30" xml2js "^0.4.17" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5771,6 +5732,11 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -5778,21 +5744,23 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.1, source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= + dependencies: + amdefine ">=0.0.4" + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -5925,7 +5893,7 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" -stream-http@^3.1.0: +stream-http@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== @@ -5951,15 +5919,6 @@ streamroller@^1.0.6: fs-extra "^7.0.1" lodash "^4.17.14" -streamroller@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.3.tgz#b95c9fad44e2e89005d242141486b3b4962c2d28" - integrity sha512-AegmvQsscTRhHVO46PhCDerjIpxi7E+d2GxgUDu+nzw/HuLnUdxHWr6WQ+mVn/4iJgMKKFFdiUwFcFRDvcjCtw== - dependencies: - date-format "^2.1.0" - debug "^4.1.1" - fs-extra "^8.1.0" - string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -6000,12 +5959,46 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trimend@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + +string.prototype.trimleft@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" + +string.prototype.trimright@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string_decoder@0.10: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.3.0: +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -6090,6 +6083,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6097,13 +6097,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -6157,6 +6150,14 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +through2@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" + integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ== + dependencies: + readable-stream "2 || 3" + xtend "~4.0.1" + through2@^2.0.0, through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -6177,7 +6178,7 @@ timers-browserify@2.0.2: dependencies: setimmediate "^1.0.4" -timers-browserify@^2.0.11, timers-browserify@^2.0.4: +timers-browserify@^2.0.10, timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== @@ -6227,11 +6228,6 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -6389,6 +6385,13 @@ typescript@3.4.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== +uglify-js@^3.1.4: + version "3.9.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.1.tgz#a56a71c8caa2d36b5556cc1fd57df01ae3491539" + integrity sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA== + dependencies: + commander "~2.20.3" + uglify-js@^3.5.0: version "3.8.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" @@ -6580,7 +6583,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@^0.12.0, util@^0.12.1: +util@^0.12.0: version "0.12.2" resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== @@ -6656,7 +6659,12 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vm-browserify@^1.0.1, vm-browserify@^1.1.2: +vm-browserify@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + +vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -6797,7 +6805,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -6816,6 +6824,11 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" From e7fa77edf55cfa82bf9098471b626bc6b49985d8 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 16 Apr 2020 08:24:32 -0700 Subject: [PATCH 0213/1298] clone grid option fix #1261 --- doc/CHANGES.md | 1 + src/gridstack.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 81197da2c..887f5ad9e 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -38,6 +38,7 @@ Change log - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) - fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid +- fix [1261](https://github.com/gridstack/gridstack.js/issues/1261) `init()` clones passed options so second doesn't affect first one ## 1.1.1 (2020-03-17) diff --git a/src/gridstack.js b/src/gridstack.js index b95812f9a..18ebbcd84 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -2106,7 +2106,7 @@ var el = $(elOrString).get(0); if (!el) return; if (!el.gridstack) { - el.gridstack = new GridStack(el, opts); + el.gridstack = new GridStack(el, Utils.clone(opts)); } return el.gridstack }; From 57993e6a08bd405a12b3d4faae7d9cb4e3092265 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 12 May 2020 13:23:57 -0700 Subject: [PATCH 0214/1298] update contribute --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6bacacb4d..ca9a0344b 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ gridstack.js [![devDependency Status](https://david-dm.org/gridstack/gridstack.js/dev-status.svg)](https://david-dm.org/gridstack/gridstack.js#info=devDependencies) [![Coverage Status](https://coveralls.io/repos/github/gridstack/gridstack.js/badge.svg?branch=develop)](https://coveralls.io/github/gridstack/gridstack.js?branch=develop) [![downloads](https://img.shields.io/npm/dm/gridstack.svg)](https://www.npmjs.com/package/gridstack) -[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/alaind831) Mobile-friendly Javascript library (with Typescript bindings) for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Allows you to build draggable, responsive bootstrap v4-friendly layouts. It also has multiple bindings and works great with [React](https://reactjs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others. Includes Typescript defines. @@ -14,7 +13,10 @@ Inspired by no-longer maintained gridster, built with love. Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). -If you find this lib useful, please [donate](https://www.paypal.me/alaind831) and help support it! +If you find this lib useful, please donate [PayPal](https://www.paypal.me/alaind831) or [Venmo](https://www.venmo.com/adumesny) (adumesny) and help support it! + +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/alaind831) +[![Donate](https://img.shields.io/badge/Donate-Venmo-g.svg)](https://www.venmo.com/adumesny) Join us on Slack: https://gridstackjs.troolee.com From 7fbbb9c30e434e02a8eb8651867cd3025d566571 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 14:55:48 -0700 Subject: [PATCH 0215/1298] fix 'addWidget' ignores data attributes #1276 --- doc/CHANGES.md | 1 + spec/gridstack-spec.js | 28 ++++++++++++++++------------ src/gridstack.js | 7 +++++-- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 887f5ad9e..8f228904c 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -39,6 +39,7 @@ Change log - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) - fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid - fix [1261](https://github.com/gridstack/gridstack.js/issues/1261) `init()` clones passed options so second doesn't affect first one +- fix [1276](https://github.com/gridstack/gridstack.js/issues/1276) `addWidget()` ignores data attributes ## 1.1.1 (2020-03-17) diff --git a/spec/gridstack-spec.js b/spec/gridstack-spec.js index 9040f6839..c3c2deab2 100644 --- a/spec/gridstack-spec.js +++ b/spec/gridstack-spec.js @@ -899,14 +899,14 @@ describe('gridstack', function() { }); - describe('addWidget() with bad string value widget options', function() { + describe('addWidget()', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should use default', function() { + it('bad string options should use default', function() { var grid = GridStack.init(); var widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''}); var $widget = $(widget); @@ -915,16 +915,7 @@ describe('gridstack', function() { expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(1); expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(1); }); - }); - - describe('addWidget with null options, ', function() { - beforeEach(function() { - document.body.insertAdjacentHTML('afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should clear x position', function() { + it('null options should clear x position', function() { var grid = GridStack.init({float: true}); var widgetHTML = '
    '; var widget = grid.addWidget(widgetHTML, null, null, undefined); @@ -932,6 +923,19 @@ describe('gridstack', function() { expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(8); expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(0); }); + it('width attr should be retained', function() { // #1276 + var grid = GridStack.init({float: true}); + var widgetHTML = '
    '; + var widget = grid.addWidget(widgetHTML, 1, 5); + var $widget = $(widget); + expect(parseInt($widget.attr('data-gs-x'), 10)).toBe(1); + expect(parseInt($widget.attr('data-gs-y'), 10)).toBe(5); + expect(parseInt($widget.attr('data-gs-width'), 10)).toBe(3); + expect(parseInt($widget.attr('data-gs-max-width'), 10)).toBe(4); + expect(parseInt($widget.attr('data-gs-height'), 10)).toBe(1); + expect($widget.attr('data-gs-id')).toBe('foo'); + }); + }); describe('method float()', function() { diff --git a/src/gridstack.js b/src/gridstack.js index 18ebbcd84..94555a886 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1425,8 +1425,8 @@ /** call to write any default attributes back to element */ GridStack.prototype._writeAttr = function(el, node) { + if (!node) { return; } el = $(el); - node = node || {}; // Note: passing null removes the attr in jquery if (node.x !== undefined) { el.attr('data-gs-x', node.x); } if (node.y !== undefined) { el.attr('data-gs-y', node.y); } @@ -1444,7 +1444,7 @@ if (node.id !== undefined) { el.attr('data-gs-id', node.id); } }; - /** call to write any default attributes back to element */ + /** call to read any default attributes back to element */ GridStack.prototype._readAttr = function(el, node) { el = $(el); node = node || {}; @@ -1488,6 +1488,9 @@ el = $(el); if (opt) { // see knockout above + // make sure we load any DOM attributes that are not specified in passed in options (which override) + domAttr = this._readAttr(el); + Utils.defaults(opt, domAttr); this.engine._prepareNode(opt); } this._writeAttr(el, opt); From ede67f7acdad1b1b5ac7311ab932501e916435cc Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 15:11:52 -0700 Subject: [PATCH 0216/1298] v1.1.2 release --- README.md | 6 +++--- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack-poly.js | 2 +- src/gridstack.d.ts | 2 +- src/gridstack.jQueryUI.js | 2 +- src/gridstack.js | 2 +- src/gridstack.scss | 2 +- 9 files changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index ca9a0344b..845b5cc11 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,8 @@ npm install --save gridstack * Using CDN (minimized): ```html - - + + ``` if you need to debug, look at the git demo/ examples for non min includes. @@ -165,7 +165,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 8f228904c..0aa88324a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [1.1.1-dev (upcoming)](#111-dev-upcoming) +- [1.1.2-dev (upcoming)](#112-dev-upcoming) +- [1.1.2 (2020-05-17)](#112-2020-05-17) - [1.1.1 (2020-03-17)](#111-2020-03-17) - [1.1.0 (2020-02-29)](#110-2020-02-29) - [v1.0.0 (2020-02-23)](#v100-2020-02-23) @@ -33,7 +34,11 @@ Change log -## 1.1.1-dev (upcoming) +## 1.1.2-dev (upcoming) + +TBD + +## 1.1.2 (2020-05-17) - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) diff --git a/package.json b/package.json index bba07e197..1dd533538 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "1.1.1-dev", + "version": "1.1.2-dev", "description": "JavaScript / TypeScript for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "dist/gridstack", "repository": { diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 72f1ba6a1..bccbaf0a8 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 1.1.1-dev extra CSS for [2-11] columns (non default) + * gridstack 1.1.2-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js index 89791a042..1cade56e0 100644 --- a/src/gridstack-poly.js +++ b/src/gridstack-poly.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.1.1-dev - IE and older browsers Polyfills for this library @preserve*/ +/** gridstack.js 1.1.2-dev - IE and older browsers Polyfills for this library @preserve*/ /** * https://gridstackjs.com/ * (c) 2019-2020 Alain Dumesny diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts index e7a37e1a6..bcfd9eb6a 100644 --- a/src/gridstack.d.ts +++ b/src/gridstack.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Gridstack 1.1.1-dev +// Type definitions for Gridstack 1.1.2-dev // Project: https://gridstackjs.com/ // Definitions by: Pascal Senn // Ricky Blankenaufulland diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js index ccbdae9cc..297ac3ed4 100644 --- a/src/gridstack.jQueryUI.js +++ b/src/gridstack.jQueryUI.js @@ -1,4 +1,4 @@ -/** gridstack.js 1.1.1-dev - JQuery UI Drag&Drop plugin @preserve */ +/** gridstack.js 1.1.2-dev - JQuery UI Drag&Drop plugin @preserve */ /** * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov diff --git a/src/gridstack.js b/src/gridstack.js index 94555a886..38b561f95 100644 --- a/src/gridstack.js +++ b/src/gridstack.js @@ -1,5 +1,5 @@ /** - * gridstack.js 1.1.1-dev + * gridstack.js 1.1.2-dev * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 922f07c1c..a293f42fe 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 1.1.1-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * required gridstack 1.1.2-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. From 7a4c6116081f3d4e450f4128288e6b2235d119dc Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 15:49:47 -0700 Subject: [PATCH 0217/1298] TS: fix 'addWidget' ignores data attributes #1276 --- spec/gridstack-spec.ts | 28 +++++++++++++++------------- src/gridstack.ts | 6 +++++- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index cccfe77e4..6d9f85d90 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -885,14 +885,14 @@ describe('gridstack', function() { }); - describe('addWidget() with bad string value widget options', function() { + describe('addWidget()', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should use default', function() { + it('bad string options should use default', function() { let grid = GridStack.init(); let widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''} as any); @@ -901,16 +901,7 @@ describe('gridstack', function() { expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(1); expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(1); }); - }); - - describe('addWidget with null options, ', function() { - beforeEach(function() { - document.body.insertAdjacentHTML('afterbegin', gridstackHTML); - }); - afterEach(function() { - document.body.removeChild(document.getElementById('gs-cont')); - }); - it('should clear x position', function() { + it('null options should clear x position', function() { let grid = GridStack.init({float: true}); let widgetHTML = '
    '; let widget = grid.addWidget(widgetHTML, {x:null, y:null, width:undefined}); @@ -918,7 +909,18 @@ describe('gridstack', function() { expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); }); - }); + it('width attr should be retained', function() { // #1276 + let grid = GridStack.init({float: true}); + let widgetHTML = '
    '; + let widget = grid.addWidget(widgetHTML, {x: 1, y: 5}); + expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(1); + expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(5); + expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(3); + expect(parseInt(widget.getAttribute('data-gs-max-width'), 10)).toBe(4); + expect(parseInt(widget.getAttribute('data-gs-height'), 10)).toBe(1); + expect(widget.getAttribute('data-gs-id')).toBe('foo'); + }); +}); describe('method getFloat()', function() { beforeEach(function() { diff --git a/src/gridstack.ts b/src/gridstack.ts index c4171ba03..2ae8f0d2e 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -323,6 +323,10 @@ export class GridStack { // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos // as the actual value are filled in when _prepareElement() calls el.getAttribute('data-gs-xyz) before adding the node. if (options) { + // make sure we load any DOM attributes that are not specified in passed in options (which override) + let domAttr = this._readAttr(el); + Utils.defaults(options, domAttr); + this.engine.prepareNode(options); this._writeAttr(el, options); } @@ -1405,7 +1409,7 @@ export class GridStack { return this; } - /** @internal call to write any default attributes back to element */ + /** @internal call to read any default attributes from element */ private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridstackWidget { node.x = Utils.toNumber(el.getAttribute('data-gs-x')); node.y = Utils.toNumber(el.getAttribute('data-gs-y')); From d12dbeefc0fc48d1b87be56a7939e6eb70f1b290 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 15:55:39 -0700 Subject: [PATCH 0218/1298] TS: 1.1.2 release notes --- README.md | 6 +++--- doc/CHANGES.md | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 75abcd9de..0a92c90ed 100644 --- a/README.md +++ b/README.md @@ -80,8 +80,8 @@ npm install --save gridstack * Using CDN (minimized): ```html - - + + ``` if you need to debug, look at the git demo/ examples for non min includes. @@ -164,7 +164,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 69a2a11e0..0f0d6f710 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -6,7 +6,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [2.0.0-dev (upcoming)](#200-dev-upcoming) -- [1.1.1-dev (upcoming)](#111-dev-upcoming) +- [1.1.2 (2020-05-17)](#112-2020-05-17) - [1.1.1 (2020-03-17)](#111-2020-03-17) - [1.1.0 (2020-02-29)](#110-2020-02-29) - [v1.0.0 (2020-02-23)](#v100-2020-02-23) @@ -36,14 +36,16 @@ Change log ## 2.0.0-dev (upcoming) +- re-write to native Typescript, removing all JQuery from main code and API (drag&drop plugin still using for now) - add `getGridItems()` to return list of HTML grid items -## 1.1.1-dev (upcoming) +## 1.1.2 (2020-05-17) - fix [1229](https://github.com/gridstack/gridstack.js/issues/1229) `staticGrid` no longer disable oneColumnMode - fix [1195](https://github.com/gridstack/gridstack.js/issues/1195) options broken with ember hash helper - thanks [@btecu](https://github.com/btecu) - fix [1250](https://github.com/gridstack/gridstack.js/issues/1250) don't remove item from another grid - fix [1261](https://github.com/gridstack/gridstack.js/issues/1261) `init()` clones passed options so second doesn't affect first one +- fix [1276](https://github.com/gridstack/gridstack.js/issues/1276) `addWidget()` ignores data attributes ## 1.1.1 (2020-03-17) From 5eec1b56551181003d4af00b1f8112b09008dd72 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 18:31:27 -0700 Subject: [PATCH 0219/1298] TS: fix removableOptions --- src/gridstack.ts | 2 +- src/types.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index 2ae8f0d2e..97258e605 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -192,7 +192,7 @@ export class GridStack { rtl: 'auto', removable: false, removableOptions: { - accept: '.' + opts.itemClass + accept: '.' + (opts.itemClass || 'grid-stack-item') }, removeTimeout: 2000, verticalMarginUnit: 'px', diff --git a/src/types.ts b/src/types.ts index f94b0579a..8f91b8c37 100644 --- a/src/types.ts +++ b/src/types.ts @@ -112,7 +112,7 @@ export interface GridstackOptions { resizable?: DDResizeOpt; /** - * if true widgets could be removed by dragging outside of the grid. It could also be a selector string, + * if true widgets could be removed by dragging outside of the grid. It could also be a selector string (ex: ".trash"), * in this case widgets will be removed by dropping them there (default?: false) * See example (http://gridstack.github.io/gridstack.js/demo/two.html) */ From c85575ba1c09a790ffc14b947c921f7f3b235e5e Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 May 2020 19:30:42 -0700 Subject: [PATCH 0220/1298] TS: initial dragIn | dragInOptions * hidding the jquery-ui drag&drop from external (ex: toolbar) functionality. * added grid options: dragIn | dragInOptions --- demo/advance.html | 3 +- demo/two.html | 9 +----- doc/CHANGES.md | 1 + src/gridstack-dragdrop-plugin.ts | 11 +++++++- src/gridstack.ts | 18 ++++++++++++ src/jq/jqueryui-gridstack-dragdrop-plugin.ts | 29 +++++++++----------- src/types.ts | 12 ++++++++ 7 files changed, 57 insertions(+), 26 deletions(-) diff --git a/demo/advance.html b/demo/advance.html index db83344d6..f8c157aed 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -111,6 +111,8 @@

    Advanced Demo

    }, removable: '#trash', removeTimeout: 100, + // dragIn: '.newWidget', + // dragInOptions: { revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' }, acceptWidgets: '.newWidget' }); @@ -119,7 +121,6 @@

    Advanced Demo

    items.forEach(function(item) { str += ' (x,y)=' + item.x + ',' + item.y; }); console.log(e.type + ' ' + items.length + ' items:' + str ); }); - // TODO: switch jquery-ui out $('.newWidget').draggable({ revert: 'invalid', diff --git a/demo/two.html b/demo/two.html index 8b2edad09..24151a810 100644 --- a/demo/two.html +++ b/demo/two.html @@ -97,6 +97,7 @@

    Two grids demo

    float: false, removable: '.trash', removeTimeout: 100, + dragIn: '.sidebar .grid-stack-item', acceptWidgets: function(el) { return true; } // function example, else can be simple: true | false | '.someClass' value }; let grids = GridStack.initAll(options); @@ -120,14 +121,6 @@

    Two grids demo

    grid.commit(); }); - // TODO: switch jquery-ui out - $('.sidebar .grid-stack-item').draggable({ - revert: 'invalid', - handle: '.grid-stack-item-content', - scroll: false, - appendTo: 'body', - }); - function toggleFloat(button, i) { grids[i].float(! grids[i].getFloat()); button.innerHTML = 'float: ' + grids[i].getFloat(); diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 0f0d6f710..75d1d5f8e 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -38,6 +38,7 @@ Change log - re-write to native Typescript, removing all JQuery from main code and API (drag&drop plugin still using for now) - add `getGridItems()` to return list of HTML grid items +- add `{dragIn | dragInOptions}` grid attributes to handle external drag&drop items ## 1.1.2 (2020-05-17) diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 6521c7534..33e4ef412 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -7,8 +7,9 @@ */ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { GridStack } from './gridstack'; +import { GridStack, GridStackElement } from './gridstack'; import { GridItemHTMLElement } from './types'; +import { DDDragInOpt } from '../dist/types'; /** Drag&Drop drop options */ export type DDDropOpt = { @@ -48,6 +49,14 @@ export class GridStackDragDropPlugin { return this; } + public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDragDropPlugin { + return this; + } + + public isDraggable(el: GridStackElement): boolean { + return false; + } + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { return this; } diff --git a/src/gridstack.ts b/src/gridstack.ts index 97258e605..cc55e8be8 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -187,6 +187,13 @@ export class GridStack { scroll: false, appendTo: 'body' }, + dragIn: undefined, + dragInOptions : { + revert: 'invalid', + handle: '.grid-stack-item-content', + scroll: false, + appendTo: 'body' + }, disableDrag: false, disableResize: false, rtl: 'auto', @@ -283,6 +290,7 @@ export class GridStack { window.addEventListener('resize', this._onResizeHandler.bind(this)); this._onResizeHandler(); + this._setupDragIn(); this._setupRemoveDrop(); this._setupAcceptWidget(); }; @@ -1481,6 +1489,16 @@ export class GridStack { return this; } + /** @internal call to setup dragging in from the outside (say toolbar), with options */ + private _setupDragIn(): GridStack { + if (!this.opts.staticGrid && typeof this.opts.dragIn === 'string') { + if (!this.dd.isDraggable(this.opts.dragIn)) { + this.dd.dragIn(this.opts.dragIn, this.opts.dragInOptions); + } + } + return this; + } + /** @internal called to setup a trash drop zone if the user specifies it */ private _setupRemoveDrop(): GridStack { if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { diff --git a/src/jq/jqueryui-gridstack-dragdrop-plugin.ts b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts index 06d297157..9c1c45b9d 100644 --- a/src/jq/jqueryui-gridstack-dragdrop-plugin.ts +++ b/src/jq/jqueryui-gridstack-dragdrop-plugin.ts @@ -6,9 +6,9 @@ * gridstack.js may be freely distributed under the MIT license. */ -import { GridStack } from '../gridstack'; +import { GridStack, GridStackElement } from '../gridstack'; import { GridStackDragDropPlugin, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dragdrop-plugin'; -import { GridItemHTMLElement } from '../types'; +import { GridItemHTMLElement, DDDragInOpt } from '../types'; // TODO: TEMPORARY until can remove jquery-ui drag&drop and this class and use HTML5 instead ! // see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs @@ -66,6 +66,12 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return this; } + public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDragDropPlugin { + let $el: JQuery = $(el); + $el.draggable(opts); + return this; + } + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDragDropPlugin { let $el: JQuery = $(el); if (typeof opts.accept === 'function' && !opts._accept) { @@ -82,6 +88,11 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { return Boolean($el.data('ui-droppable')); } + public isDraggable(el: GridStackElement): boolean { + let $el: JQuery = $(el); + return Boolean($el.data('ui-draggable')); + } + public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDragDropPlugin { let $el: JQuery = $(el); $el.on(name, (event, ui) => { callback(event as any, ui.draggable ? ui.draggable.get(0) : event.target) }); @@ -97,17 +108,3 @@ export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin { // finally register ourself GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - -/* OLD code for reference -function JQueryUIGridStackDragDropPlugin(grid) { - GridStack.DragDropPlugin.call(this, grid); -} - -GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin); - -JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype); -JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin; -.... -scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin; -return JQueryUIGridStackDragDropPlugin; -*/ diff --git a/src/types.ts b/src/types.ts index 8f91b8c37..d5ad1ad1c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -70,6 +70,12 @@ export interface GridstackOptions { /** allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) */ draggable?: DDDragOpt; + /** allows to drag external items using this selector - see dragInOption. (default: undefined) */ + dragIn?: string; + + /** allows to drag external items using these options. (default?: { handle: '.grid-stack-item-content', revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' }) */ + dragInOptions?: DDDragInOpt; + /** let user drag nested grid items out of a parent or not (default false) */ dragOut?: boolean; @@ -219,6 +225,12 @@ export interface DDDragOpt { /** parent constraining where item can be dragged out from (default: null = no constrain) */ containment?: string; } +export interface DDDragInOpt extends DDDragOpt { + /** used when draging item from the outside, and canceling (ex: 'invalid')*/ + revert?: string; + /** helper function when dropping (ex: 'clone') */ + helper?: string; +} /** * internal descriptions describing the items in the grid From 96ce9c09767797789ffc2ce6db8f2983933e52d1 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 18 May 2020 07:46:17 -0700 Subject: [PATCH 0221/1298] TS: more drag&drop fix * fixed typo, and converted adavnce.html TODO: toolbar item is removed when inserted (even though we clone). --- demo/advance.html | 11 ++--------- src/gridstack-dragdrop-plugin.ts | 9 +++++++-- src/gridstack.ts | 2 +- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/demo/advance.html b/demo/advance.html index f8c157aed..9f33960f9 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -111,8 +111,8 @@

    Advanced Demo

    }, removable: '#trash', removeTimeout: 100, - // dragIn: '.newWidget', - // dragInOptions: { revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' }, + dragIn: '.newWidget', + dragInOptions: { revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' }, acceptWidgets: '.newWidget' }); @@ -121,13 +121,6 @@

    Advanced Demo

    items.forEach(function(item) { str += ' (x,y)=' + item.x + ',' + item.y; }); console.log(e.type + ' ' + items.length + ' items:' + str ); }); - // TODO: switch jquery-ui out - $('.newWidget').draggable({ - revert: 'invalid', - scroll: false, - appendTo: 'body', - helper: 'clone' - }); diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts index 33e4ef412..622ab9a0e 100644 --- a/src/gridstack-dragdrop-plugin.ts +++ b/src/gridstack-dragdrop-plugin.ts @@ -8,8 +8,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { GridStack, GridStackElement } from './gridstack'; -import { GridItemHTMLElement } from './types'; -import { DDDragInOpt } from '../dist/types'; +import { GridItemHTMLElement, DDDragInOpt } from './types'; /** Drag&Drop drop options */ export type DDDropOpt = { @@ -33,10 +32,16 @@ export class GridStackDragDropPlugin { protected grid: GridStack; static registeredPlugins: typeof GridStackDragDropPlugin[] = []; + /** call this method to register your plugin instead of the default no-op one */ static registerPlugin(pluginClass: typeof GridStackDragDropPlugin) { GridStackDragDropPlugin.registeredPlugins.push(pluginClass); } + /** get the current registered plugin to use */ + static get(): typeof GridStackDragDropPlugin { + return GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; + } + public constructor(grid: GridStack) { this.grid = grid; } diff --git a/src/gridstack.ts b/src/gridstack.ts index cc55e8be8..897202c58 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -213,7 +213,7 @@ export class GridStack { if (this.opts.ddPlugin === false) { this.opts.ddPlugin = GridStackDragDropPlugin; } else if (this.opts.ddPlugin === undefined) { - this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin; + this.opts.ddPlugin = GridStackDragDropPlugin.get(); } this.dd = new (this.opts.ddPlugin as typeof GridStackDragDropPlugin)(this); From eb73d4c9f39ea0dc3a82cbcf710f0098dd15f257 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 24 May 2020 09:51:20 -0700 Subject: [PATCH 0222/1298] #1286 updated serialize demo to use Update() --- demo/serialization.html | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/demo/serialization.html b/demo/serialization.html index f5f11031a..b60f8ade6 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -35,20 +35,30 @@

    Serialization demo

    }); var serializedData = [ - {x: 0, y: 0, width: 2, height: 2}, - {x: 3, y: 1, width: 1, height: 2}, - {x: 4, y: 1, width: 1, height: 1}, - {x: 2, y: 3, width: 3, height: 1}, - {x: 1, y: 3, width: 1, height: 1} + {x: 0, y: 0, width: 2, height: 2, id: '0'}, + {x: 3, y: 1, width: 1, height: 2, id: '1'}, + {x: 4, y: 1, width: 1, height: 1, id: '2'}, + {x: 2, y: 3, width: 3, height: 1, id: '3'}, + {x: 1, y: 3, width: 1, height: 1, id: '4'} ]; loadGrid = function() { - grid.removeAll(); var items = GridStack.Utils.sort(serializedData); grid.batchUpdate(); - items.forEach(function (node) { - grid.addWidget('
    ', node); - }); + + if (grid.engine.nodes.length === 0) { + // load from empty + items.forEach(function (item) { + grid.addWidget('
    ' + item.id + '
    ', item); + }); + } else { + // else update existing nodes (instead of calling grid.removeAll()) + grid.engine.nodes.forEach(function (node) { + var item = items.find(function(e) { return e.id === node.id}); + grid.update(node.el, item.x, item.y, item.width, item.height); + }); + } + grid.commit(); }; @@ -59,7 +69,8 @@

    Serialization demo

    x: node.x, y: node.y, width: node.width, - height: node.height + height: node.height, + id: node.id }); }); document.querySelector('#saved-data').value = JSON.stringify(serializedData, null, ' '); From 4a711567d52a7eec184a31d2a36031902f8097f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2020 14:29:57 +0000 Subject: [PATCH 0223/1298] Bump websocket-extensions from 0.1.3 to 0.1.4 Bumps [websocket-extensions](https://github.com/faye/websocket-extensions-node) from 0.1.3 to 0.1.4. - [Release notes](https://github.com/faye/websocket-extensions-node/releases) - [Changelog](https://github.com/faye/websocket-extensions-node/blob/master/CHANGELOG.md) - [Commits](https://github.com/faye/websocket-extensions-node/compare/0.1.3...0.1.4) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 79db08eab..fe65c09d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5294,9 +5294,9 @@ websocket-driver@>=0.5.1: websocket-extensions ">=0.1.1" websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== websocket-stream@^5.0.1: version "5.5.0" From 9a2eb39d785a378652f552de40e6b46711e41483 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 4 Jul 2020 09:13:04 -0700 Subject: [PATCH 0224/1298] #1286 new save()/restore() API * added new api to save and relod layouts and test cases showing usage * GridstackWidget -> GridStackWidget typo fix --- README.md | 2 +- demo/serialization.html | 51 +++++++++++++++++++++++++++++++---------- doc/CHANGES.md | 1 + doc/README.md | 20 ++++++++++++++++ spec/gridstack-spec.ts | 36 +++++++++++++++++++++++++++-- src/gridstack-engine.ts | 24 +++++++++++++++++-- src/gridstack.ts | 41 ++++++++++++++++++++++++++++----- src/types.ts | 4 ++-- src/utils.ts | 4 ++-- 9 files changed, 156 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 0a92c90ed..81ba0eca5 100644 --- a/README.md +++ b/README.md @@ -335,7 +335,7 @@ make sure to read v1.0.0 migration first! v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes and overall code cleanup. Your code might need to change from 1.x 1. In general methods that used no args (getter) vs setter are not used in Typescript. -Also legacy methods that used to take tons of parameters will now take a single object (typically `GridstackOptions` or `GridstackWidget`). +Also legacy methods that used to take tons of parameters will now take a single object (typically `GridstackOptions` or `GridStackWidget`). ``` removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {with, ...})` diff --git a/demo/serialization.html b/demo/serialization.html index 2009f0e28..6f4010585 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -14,9 +14,11 @@

    Serialization demo

    Save Load + Save Manual + Load Manual Clear

    -
    +

    @@ -31,31 +33,56 @@

    Serialization demo

    }); let serializedData = [ - {x: 0, y: 0, width: 2, height: 2}, - {x: 3, y: 1, width: 1, height: 2}, - {x: 4, y: 1, width: 1, height: 1}, - {x: 2, y: 3, width: 3, height: 1}, - {x: 1, y: 3, width: 1, height: 1} + {x: 0, y: 0, width: 2, height: 2, id: '0'}, + {x: 3, y: 1, width: 1, height: 2, id: '1'}, + {x: 4, y: 1, width: 1, height: 1, id: '2'}, + {x: 2, y: 3, width: 3, height: 1, id: '3'}, + {x: 1, y: 3, width: 1, height: 1, id: '4'} ]; + // NEW 2.x method loadGrid = function() { - grid.removeAll(); + grid.restore(serializedData, true); + } + + // NEW 2.x method + saveGrid = function() { + serializedData = grid.save(); + document.querySelector('#saved-data').value = JSON.stringify(serializedData, null, ' '); + } + + // old (pre 2.x) way to manually load a grid + loadGridManual = function() { let items = GridStack.Utils.sort(serializedData); grid.batchUpdate(); - items.forEach(function (node) { - grid.addWidget('
    ', node); - }); + + if (grid.engine.nodes.length === 0) { + // load from empty + items.forEach(function (item) { + grid.addWidget('
    ' + item.id + '
    ', item); + }); + } else { + // else update existing nodes (instead of calling grid.removeAll()) + grid.engine.nodes.forEach(function (node) { + let item = items.find(function(e) { return e.id === node.id}); + grid.update(node.el, item.x, item.y, item.width, item.height); + }); + } + grid.commit(); }; - saveGrid = function() { + // old (pre 2.x) way to manually save a grid + saveGridManual = function() { serializedData = []; grid.engine.nodes.forEach(function(node) { serializedData.push({ x: node.x, y: node.y, width: node.width, - height: node.height + height: node.height, + id: node.id, + custom: 'save anything here' }); }); document.querySelector('#saved-data').value = JSON.stringify(serializedData, null, ' '); diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 75d1d5f8e..6824d7846 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -39,6 +39,7 @@ Change log - re-write to native Typescript, removing all JQuery from main code and API (drag&drop plugin still using for now) - add `getGridItems()` to return list of HTML grid items - add `{dragIn | dragInOptions}` grid attributes to handle external drag&drop items +- add `save()` and `restore()` to serialize grids from JSON, saving all attributes (not just w,h,x,y) [1286](https://github.com/gridstack/gridstack.js/issues/1286) ## 1.1.2 (2020-05-17) diff --git a/doc/README.md b/doc/README.md index 4e83a5b0f..51352160b 100644 --- a/doc/README.md +++ b/doc/README.md @@ -36,6 +36,7 @@ gridstack.js API - [float(val?)](#floatval) - [getCellHeight()](#getcellheight) - [getCellFromPixel(position[, useOffset])](#getcellfrompixelposition-useoffset) + - [getGridItems(): GridItemHTMLElement[]](#getgriditems-griditemhtmlelement) - [isAreaEmpty(x, y, width, height)](#isareaemptyx-y-width-height) - [locked(el, val)](#lockedel-val) - [makeWidget(el)](#makewidgetel) @@ -49,6 +50,8 @@ gridstack.js API - [removeAll([removeDOM])](#removeallremovedom) - [resize(el, width, height)](#resizeel-width-height) - [resizable(el, val)](#resizableel-val) + - [restore(layout: GridStackWidget[], addAndRemove?: boolean)](#restorelayout-gridstackwidget-addandremove-boolean) + - [save(): GridStackWidget[]](#save-gridstackwidget) - [setAnimation(doAnimate)](#setanimationdoanimate) - [setStatic(staticValue)](#setstaticstaticvalue) - [update(el, x, y, width, height)](#updateel-x-y-width-height) @@ -83,6 +86,8 @@ gridstack.js API - `disableDrag` - disallows dragging of widgets (default: `false`). - `disableOneColumnMode` - disables the onColumnMode when the grid width is less than minWidth (default: 'false') - `disableResize` - disallows resizing of widgets (default: `false`). +- `dragIn` - specify the class of items that can be dragged into the grid (ex: dragIn: '.newWidget' +- `dragInOptions` - options for items that can be dragged into the grid (ex: dragInOptions: { revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' } - `draggable` - allows to override jQuery UI draggable options. (default: `{handle: '.grid-stack-item-content', scroll: false, appendTo: 'body', containment: null}`) - `dragOut` to let user drag nested grid items out of a parent or not (default false) See [example](http://gridstackjs.com/demo/nested.html) - `float` - enable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) @@ -361,6 +366,10 @@ Parameters : Returns an object with properties `x` and `y` i.e. the column and row in the grid. +### getGridItems(): GridItemHTMLElement[] + +Return list of GridItem HTML dom elements (excluding temporary placeholder) + ### isAreaEmpty(x, y, width, height) Checks if specified area is empty. @@ -464,6 +473,17 @@ Enables/Disables resizing. - `el` - widget to modify - `val` - if `true` widget will be resizable. +### restore(layout: GridStackWidget[], addAndRemove?: boolean) + +- used to restore a grid layout for a saved layout list (see `save()`). +- Optional `addAndRemove` can be passed if new widgets should be added or removed if the are not present (`id` is used to look items up) +- see [example](http://gridstackjs.com/demo/serialization.html) + +### save(): GridStackWidget[] + +- returns the layout of the grid that can be serialized (list of item non default attributes, not just w,y,x,y but also min/max and id). See `restore()` +- see [example](http://gridstackjs.com/demo/serialization.html) + ### setAnimation(doAnimate) Toggle the grid animation state. Toggles the `grid-stack-animate` class. diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 6d9f85d90..4fbb90886 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -7,10 +7,10 @@ describe('gridstack', function() { // grid has 4x2 and 4x4 top-left aligned - used on most test cases let gridHTML = '
    ' + - '
    ' + + '
    ' + '
    item 1
    ' + '
    ' + - '
    ' + + '
    ' + '
    item 2
    ' + '
    ' + '
    '; @@ -1469,6 +1469,38 @@ describe('gridstack', function() { }); + describe('save & restore', function() { + beforeEach(function() { + document.body.insertAdjacentHTML('afterbegin', gridstackHTML); + }); + afterEach(function() { + document.body.removeChild(document.getElementById('gs-cont')); + }); + it('save layout', function() { + let grid = GridStack.init(); + let layout = grid.save(); + expect(layout).toEqual([{x:0, y:0, width:4, height:2, id:'item1'}, {x:4, y:0, width:4, height:4, id:'item2'}]); + }); + it('restore size 1 item', function() { + let grid = GridStack.init(); + grid.restore([{height:3, id:'item1'}]); + let layout = grid.save(); + expect(layout).toEqual([{x:0, y:0, width:4, height:3, id:'item1'}, {x:4, y:0, width:4, height:4, id:'item2'}]); + }); + it('restore move 1 item, delete others', function() { + let grid = GridStack.init(); + grid.restore([{x:2, height:1, id:'item2'}], true); + let layout = grid.save(); + expect(layout).toEqual([{x:2, y:0, width:4, height:1, id:'item2'}]); + }); + it('restore add new, delete others', function() { + let grid = GridStack.init(); + grid.restore([{width:2, height:1, id:'item3'}], true); + let layout = grid.save(); + expect(layout).toEqual([{x:0, y:0, width:2, height:1, id:'item3'}]); + }); + }); + // ..and finally track log warnings at the end, instead of displaying them.... describe('obsolete warnings', function() { console.warn = jasmine.createSpy('log'); // track warnings instead of displaying them diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index d9dd41268..92333eaeb 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -7,7 +7,7 @@ */ import { Utils, obsolete } from './utils'; -import { GridStackNode } from './types'; +import { GridStackNode, GridStackWidget } from './types'; export type onChangeCB = (nodes: GridStackNode[], removeDOM?: boolean) => void; @@ -466,6 +466,26 @@ export class GridStackEngine { return this; } + /** saves the current layout returning a list of widgets for serialization */ + public save(): GridStackWidget[] { + let widgets: GridStackWidget[] = []; + Utils.sort(this.nodes); + this.nodes.forEach(n => { + let w: GridStackNode = {}; + for (let key in n) { if (key[0] !== '_' && n[key] !== null && n[key] !== undefined ) w[key] = n[key]; } + // delete other internals + delete w.el; + delete w.grid; + // delete default values (will be re-created on read) + if (!w.autoPosition) delete w.autoPosition; + if (!w.noResize) delete w.noResize; + if (!w.noMove) delete w.noMove; + if (!w.locked) delete w.locked; + widgets.push(w); + }); + return widgets; + } + /** @internal called whenever a node is added or moved - updates the cached layouts */ public layoutsNodesChange(nodes: GridStackNode[]): GridStackEngine { if (!this._layouts || this._ignoreLayoutsNodeChange) return this; @@ -614,7 +634,7 @@ export class GridStackEngine { private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } -/** @internal class to store per column layout bare minimal info (subset of GridstackWidget) */ +/** @internal class to store per column layout bare minimal info (subset of GridStackWidget) */ interface Layout { x: number; y: number; diff --git a/src/gridstack.ts b/src/gridstack.ts index 897202c58..758560bb2 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,7 +8,7 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils'; -import { GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; +import { GridItemHTMLElement, GridStackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin'; export type GridStackElement = string | HTMLElement | GridItemHTMLElement; @@ -310,14 +310,14 @@ export class GridStack { * @param el html element or string definition to add * @param options widget position/size options (optional) - see GridStackWidget */ - public addWidget(el: GridStackElement, options?: GridstackWidget): GridItemHTMLElement { + public addWidget(el: GridStackElement, options?: GridStackWidget): GridItemHTMLElement { // support legacy call for now ? if (arguments.length > 2) { console.warn('gridstack.ts: `addWidget(el, x, y, width...)` is deprecated. Use `addWidget(el, {x, y, width,...})`. It will be removed soon'); // eslint-disable-next-line prefer-rest-params let a = arguments, i = 1, - opt: GridstackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], + opt: GridStackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], minWidth:a[i++], maxWidth:a[i++], minHeight:a[i++], maxHeight:a[i++], id:a[i++] }; return this.addWidget(el, opt); } @@ -342,6 +342,35 @@ export class GridStack { return this.makeWidget(el); } + /** saves the current layout returning a list of widgets for serialization */ + public save(): GridStackWidget[] { return this.engine.save(); } + + /** restore the widgets from a list. This will call update() on each (matching by id), + * or optionally add/remove widgets that are not there (either a boolean or a callback method) */ + public restore(layout: GridStackWidget[], addAndRemove?: boolean) { + let items = GridStack.Utils.sort(layout); + this.batchUpdate(); + // see if any items are missing from new layout and need to be removed first + if (addAndRemove) { + this.engine.nodes.forEach(n => { + let item = items.find(w => n.id === w.id); + if (!item) { + this.removeWidget(n.el); + } + }); + } + // now add/update the widgets + items.forEach(w => { + let item = this.engine.nodes.find(n => n.id === w.id); + if (item) { + this.update(item.el, w.x, w.y, w.width, w.height); // TODO: full update + } else if (addAndRemove) { + this.addWidget('
    ', w); + } + }); + this.commit(); + } + /** * Initializes batch updates. You will see no changes until `commit()` method is called. */ @@ -465,7 +494,7 @@ export class GridStack { return this.opts.column; } - /** returns an array of grid HTML elements (no placeholder) - used internally to iterate through our children */ + /** returns an array of grid HTML elements (no placeholder) - used to iterate through our children */ public getGridItems(): GridItemHTMLElement[] { return Array.from(this.el.children) .filter((el: HTMLElement) => el.matches('.' + this.opts.itemClass) && !el.matches('.' + this.opts.placeholderClass)) as GridItemHTMLElement[]; @@ -1380,7 +1409,7 @@ export class GridStack { } /** @internal call to write any default attributes back to element */ - private _writeAttr(el: HTMLElement, node: GridstackWidget): GridStack { + private _writeAttr(el: HTMLElement, node: GridStackWidget): GridStack { if (!node) return this; this._writeAttrs(el, node.x, node.y, node.width, node.height); @@ -1418,7 +1447,7 @@ export class GridStack { } /** @internal call to read any default attributes from element */ - private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridstackWidget { + private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridStackWidget { node.x = Utils.toNumber(el.getAttribute('data-gs-x')); node.y = Utils.toNumber(el.getAttribute('data-gs-y')); node.width = Utils.toNumber(el.getAttribute('data-gs-width')); diff --git a/src/types.ts b/src/types.ts index d5ad1ad1c..0aa4b1fee 100644 --- a/src/types.ts +++ b/src/types.ts @@ -166,7 +166,7 @@ export interface GridstackOptions { /** * Gridstack Widget creation options */ -export interface GridstackWidget { +export interface GridStackWidget { /** widget position x (default?: 0) */ x?: number; /** widget position y (default?: 0) */ @@ -235,7 +235,7 @@ export interface DDDragInOpt extends DDDragOpt { /** * internal descriptions describing the items in the grid */ -export interface GridStackNode extends GridstackWidget { +export interface GridStackNode extends GridStackWidget { /** pointer back to HTML element */ el?: GridItemHTMLElement; /** pointer back to Grid instance */ diff --git a/src/utils.ts b/src/utils.ts index f39846c3e..44898efec 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -6,7 +6,7 @@ * gridstack.js may be freely distributed under the MIT license. */ -import { GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; +import { GridStackWidget, GridStackNode, GridstackOptions, numberOrString } from './types'; /** checks for obsolete method names */ export function obsolete(self, f, oldName: string, newName: string, rev: string) { @@ -51,7 +51,7 @@ export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, export class Utils { /** returns true if a and b overlap */ - static isIntercepted(a: GridstackWidget, b: GridstackWidget): boolean { + static isIntercepted(a: GridStackWidget, b: GridStackWidget): boolean { return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); } From 664624f5e1328fae76affeb756186bbfa1975536 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Jul 2020 09:07:54 -0700 Subject: [PATCH 0225/1298] TS: fix to _gsEventHandler being null --- src/gridstack.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index 758560bb2..df533475d 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -128,7 +128,7 @@ export class GridStack { /** @internal */ private _stylesId: string; /** @internal */ - private _gsEventHandler: {}; + private _gsEventHandler = {}; /** @internal */ private _styles: GridCSSStyleSheet; /** @internal */ @@ -816,7 +816,6 @@ export class GridStack { if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') { // native CustomEvent handlers - cash the generic handlers so we can easily remove let noData = (name === 'enable' || name === 'disable'); - this._gsEventHandler = this._gsEventHandler || {}; if (noData) { this._gsEventHandler[name] = (event: Event) => callback(event); } else { @@ -838,8 +837,6 @@ export class GridStack { * @param name of the event (see possible values) */ public off(name: GridStackEvent): GridStack { - if (!this._gsEventHandler) return; - // check for array of names being passed instead if (name.indexOf(' ') !== -1) { let names = name.split(' ') as GridStackEvent[]; @@ -849,7 +846,7 @@ export class GridStack { if (name === 'change' || name === 'added' || name === 'removed' || name === 'enable' || name === 'disable') { // remove native CustomEvent handlers - if (this._gsEventHandler && this._gsEventHandler[name]) { + if (this._gsEventHandler[name]) { this.el.removeEventListener(name, this._gsEventHandler[name]); } } From 2e704326ea59011ae1da744910e0e6ec0796398d Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Jul 2020 09:36:11 -0700 Subject: [PATCH 0226/1298] TS: fix for #810 many columns roundoff error * cellWidth() no longer round things off (I was able to see issue with 60 columns and dragging itelf on right and would not relocate unless moved a lot futher). --- src/gridstack.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index df533475d..474f573ed 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -424,7 +424,7 @@ export class GridStack { */ public cellWidth(): number { // TODO: take margin into account (horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) - return Math.round(this.el.offsetWidth / this.opts.column); + return this.el.offsetWidth / this.opts.column; } /** From 08a52817fd8dae1c3bf53b7ca046eb431d4698a4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Jul 2020 09:40:45 -0700 Subject: [PATCH 0227/1298] TS: doc fixes --- doc/CHANGES.md | 1 + spec/e2e/html/810-many-columns.html | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 6824d7846..aa6a6dc71 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -40,6 +40,7 @@ Change log - add `getGridItems()` to return list of HTML grid items - add `{dragIn | dragInOptions}` grid attributes to handle external drag&drop items - add `save()` and `restore()` to serialize grids from JSON, saving all attributes (not just w,h,x,y) [1286](https://github.com/gridstack/gridstack.js/issues/1286) +- fix [1299](https://github.com/gridstack/gridstack.js/pull/1299) many columns round-off error ## 1.1.2 (2020-05-17) diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html index 6274248dc..3bfbc210d 100644 --- a/spec/e2e/html/810-many-columns.html +++ b/spec/e2e/html/810-many-columns.html @@ -8,11 +8,7 @@ - - - - - +
    @@ -30,8 +26,7 @@

    Many Columns demo

    let count = 0; let options = { column: COLUMNS, - cellHeight: 'auto', - float: false + cellHeight: 'auto' }; let grid = GridStack.init(options); From a7eadf4db2f41a81e87ac9722340f08f2b6c8f18 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 5 Jul 2020 11:53:24 -0700 Subject: [PATCH 0228/1298] TS: more fix for #810 many columns roundoff error --- src/gridstack.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index 474f573ed..24a7c7310 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -233,7 +233,7 @@ export class GridStack { this._isAutoCellHeight = (this.opts.cellHeight === 'auto'); if (this._isAutoCellHeight) { // make the cell square initially - this.cellHeight(this.cellWidth(), true); + this.cellHeight(Math.round(this.cellWidth()), true); } else { this.cellHeight(this.opts.cellHeight, true); } @@ -1500,7 +1500,7 @@ export class GridStack { */ private _onResizeHandler(): GridStack { if (this._isAutoCellHeight) { - Utils.throttle(() => { this.cellHeight(this.cellWidth(), false)}, 100); + Utils.throttle(() => { this.cellHeight(Math.round(this.cellWidth()), false)}, 100); } if (!this.opts.disableOneColumnMode && this.el.clientWidth <= this.opts.minWidth) { From 94e1341ea09f8cd5dfba62defbbb92c6bd1a6e9a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 6 Jul 2020 23:25:00 -0700 Subject: [PATCH 0229/1298] TS: #723 #726 `margin` to replace `verticalMargin` * complete re-write how we size/position items dealing with margin * we now have a single `margin` grid option which will set all 4 sides instead of one in code nad one in CSS * also have `marginTop/Bottom/Left/Right` if more precise setting is required * greatly reduced the layout code as margin are now inside the grid-item (affects content) * fixed code so `cellHeight: 'auto'` (now the default) will create real square cells (used to be off due to margin) * grid will now have consistant spacing (above/below first/last rows) --- README.md | 7 +- demo/nested.html | 3 +- doc/CHANGES.md | 4 +- doc/README.md | 49 +- .../1017-items-no-x-y-for-autoPosition.html | 2 +- spec/e2e/html/810-many-columns.css | 601 ++++++++++++++---- spec/e2e/html/810-many-columns.html | 8 +- spec/gridstack-spec.ts | 84 +-- src/gridstack.scss | 22 +- src/gridstack.ts | 226 ++++--- src/types.ts | 26 +- src/utils.ts | 10 +- 12 files changed, 714 insertions(+), 328 deletions(-) diff --git a/README.md b/README.md index 81ba0eca5..f08a94f52 100644 --- a/README.md +++ b/README.md @@ -334,14 +334,15 @@ make sure to read v1.0.0 migration first! v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes and overall code cleanup. Your code might need to change from 1.x -1. In general methods that used no args (getter) vs setter are not used in Typescript. -Also legacy methods that used to take tons of parameters will now take a single object (typically `GridstackOptions` or `GridStackWidget`). +1. In general methods that used no args (getter) vs setter are not used in Typescript when the arguments differ. +Also legacy methods that used to take many parameters will now take a single object (typically `GridstackOptions` or `GridStackWidget`). ``` removed `addWidget(el, x, y, width, ...)` --> use the widget options version instead `addWidget(el, {with, ...})` `float()` to get value --> `getFloat()` 'cellHeight()` to get value --> `getCellHeight()` -'verticalMargin()` to get value --> `getVerticalMargin()` +'verticalMargin' is now 'margin' grid options and applies to all 4 sides. +'verticalMargin()` to get value --> `getMargin()` ``` 2. event signatures are generic and not jquery-ui dependent anymore. `gsresizestop` has been removed as `resizestop|dragstop` are now called **after** the DOm attributes have been updated. diff --git a/demo/nested.html b/demo/nested.html index bd2f3f233..ef4efc3c4 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -57,7 +57,8 @@

    Nested grids demo

    let nestOptions = { acceptWidgets: '.grid-stack-item.sub', // only pink sub items can be inserted, otherwise grid-items causes all sort of issues dragOut: true, // let us drag them out! - disableOneColumnMode: true // nested are small, but still want N columns + disableOneColumnMode: true, // nested are small, but still want N columns + margin: 1 }; GridStack.init(null, '.grid-stack.top'); let grid1 = GridStack.init(nestOptions, '.grid-stack.nested1'); diff --git a/doc/CHANGES.md b/doc/CHANGES.md index aa6a6dc71..181a80f42 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -40,6 +40,8 @@ Change log - add `getGridItems()` to return list of HTML grid items - add `{dragIn | dragInOptions}` grid attributes to handle external drag&drop items - add `save()` and `restore()` to serialize grids from JSON, saving all attributes (not just w,h,x,y) [1286](https://github.com/gridstack/gridstack.js/issues/1286) +- add `margin` to replace `verticalMargin` which affects both dimensions in code, rather than one in code the other in CSS. +You can now have perfect square cells (default) [723](https://github.com/gridstack/gridstack.js/issues/723) - fix [1299](https://github.com/gridstack/gridstack.js/pull/1299) many columns round-off error ## 1.1.2 (2020-05-17) @@ -210,7 +212,7 @@ thanks [@ermcgrat](https://github.com/ermcgrat) and others for pointing out code ## v0.2.5 (2016-03-02) - update names to respect js naming convention. -- `cellHeight` and `verticalMargin` can now be string (e.g. '3em', '20px') (Thanks to @jlowcs). +- `cellHeight` and `margin` can now be string (e.g. '3em', '20px') (Thanks to @jlowcs). - add `maxWidth`/`maxHeight` methods. - add `enableMove`/`enableResize` methods. - fix window resize issue [#331](https://github.com/gridstack/gridstack.js/issues/331)). diff --git a/doc/README.md b/doc/README.md index 51352160b..ac7cff0fa 100644 --- a/doc/README.md +++ b/doc/README.md @@ -24,7 +24,7 @@ gridstack.js API - [addWidget(el, [options])](#addwidgetel-options) - [batchUpdate()](#batchupdate) - [compact()](#compact) - - [cellHeight(val, noUpdate)](#cellheightval-noupdate) + - [cellHeight(val: number, update = true)](#cellheightval-number-update--true) - [cellWidth()](#cellwidth) - [commit()](#commit) - [column(column, doNotPropagate)](#columncolumn-donotpropagate) @@ -37,9 +37,11 @@ gridstack.js API - [getCellHeight()](#getcellheight) - [getCellFromPixel(position[, useOffset])](#getcellfrompixelposition-useoffset) - [getGridItems(): GridItemHTMLElement[]](#getgriditems-griditemhtmlelement) + - [getMargin()](#getmargin) - [isAreaEmpty(x, y, width, height)](#isareaemptyx-y-width-height) - [locked(el, val)](#lockedel-val) - [makeWidget(el)](#makewidgetel) + - [margin(value: number)](#marginvalue-number) - [maxHeight(el, val)](#maxheightel-val) - [minHeight(el, val)](#minheightel-val) - [maxWidth(el, val)](#maxwidthel-val) @@ -55,8 +57,6 @@ gridstack.js API - [setAnimation(doAnimate)](#setanimationdoanimate) - [setStatic(staticValue)](#setstaticstaticvalue) - [update(el, x, y, width, height)](#updateel-x-y-width-height) - - [getVerticalMargin()](#getverticalmargin) - - [verticalMargin(value, noUpdate)](#verticalmarginvalue-noupdate) - [willItFit(x, y, width, height, autoPosition)](#willitfitx-y-width-height-autoposition) - [Utils](#utils) - [GridStack.Utils.sort(nodes[, dir[, width]])](#gridstackutilssortnodes-dir-width) @@ -76,11 +76,11 @@ gridstack.js API See [example](http://gridstack.github.io/gridstack.js/demo/advance.html) - `animate` - turns animation on (default: `false`) - `auto` - if `false` gridstack will not initialize existing items (default: `true`) -- `cellHeight` - one cell height (default: `60`). Can be: +- `cellHeight` - one cell height (default: `auto`). Can be: * an integer (px) - * a string (ex: '100px', '10em', '10rem', '10%') + * a string (ex: '100px', '10em', '10rem', '10%', `10vh') * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files. - * `'auto'` - height will be calculated cell square initially. + * `'auto'` - height will be square cells initially. - `column` - number of columns (default: `12`) which can change on the fly with `column(N)` as well. See [example](http://gridstackjs.com/demo/column.html) - `ddPlugin` - class that implement drag'n'drop functionality for gridstack. If `false` grid will be static. (default: `null` - first available plugin will be used) - `disableDrag` - disallows dragging of widgets (default: `false`). @@ -94,6 +94,13 @@ gridstack.js API - `handle` - draggable handle selector (default: `'.grid-stack-item-content'`) - `handleClass` - draggable handle class (e.g. `'grid-stack-item-content'`). If set `handle` is ignored (default: `null`) - `itemClass` - widget class (default: `'grid-stack-item'`) +- `margin` - gap size around grid item and content (default: `10`). Can be: + * an integer (px) + * a string (ex: '2em', '20px', '2rem') +- `marginTop`: numberOrString - can set individual settings (defaults to `margin`) +- `marginRight`: numberOrString +- `marginBottom`: numberOrString +- `marginLeft`: numberOrString - `maxRow` - maximum rows amount. Default is `0` which means no max. - `minRow` - minimum rows amount which is handy to prevent grid from collapsing when empty. Default is `0`. You can also do this with `min-height` CSS attribute on the grid div in pixels, which will round to the closest row. - `minWidth` - minimal width. If grid width is less than or equal to, grid will be shown in one-column mode (default: `768`) @@ -106,9 +113,6 @@ gridstack.js API - `row` - fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. (default `0` no constrain) - `rtl` - if `true` turns grid to RTL. Possible values are `true`, `false`, `'auto'` (default: `'auto'`) See [example](http://gridstackjs.com/demo/rtl.html) - `staticGrid` - removes drag&drop&resize (default `false`). If `true` widgets are not movable/resizable by the user, but code can still move and oneColumnMode will still work. You don't even need jQueryUI draggable/resizable. A CSS class `grid-stack-static` is also added to the container. -- `verticalMargin` - vertical gap size (default: `20`). Can be: - * an integer (px) - * a string (ex: '2em', '20px', '2rem') ## Grid attributes @@ -273,9 +277,9 @@ starts batch updates. You will see no changes until `commit()` method is called. re-layout grid items to reclaim any empty space. -### cellHeight(val, noUpdate) +### cellHeight(val: number, update = true) -Update current cell height. This method rebuilds an internal CSS stylesheet (unless optional noUpdate=true). Note: You can expect performance issues if +Update current cell height. This method rebuilds an internal CSS stylesheet (unless optional update=false). Note: You can expect performance issues if call this method too often. ```js @@ -284,7 +288,7 @@ grid.cellHeight(grid.cellWidth() * 1.2); ### cellWidth() -Gets current cell width. +Gets current cell width (grid width / # of columns). ### commit() @@ -370,6 +374,10 @@ Returns an object with properties `x` and `y` i.e. the column and row in the gri Return list of GridItem HTML dom elements (excluding temporary placeholder) +### getMargin() + +returns current margin value. + ### isAreaEmpty(x, y, width, height) Checks if specified area is empty. @@ -396,6 +404,12 @@ grid.el.appendChild('
    let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, float: true }; GridStack.init(options); diff --git a/spec/e2e/html/810-many-columns.css b/spec/e2e/html/810-many-columns.css index 03c4f18d5..beeedc645 100644 --- a/spec/e2e/html/810-many-columns.css +++ b/spec/e2e/html/810-many-columns.css @@ -16,366 +16,725 @@ /* override gridstack,css */ .grid-stack > .grid-stack-item { - min-width: 3.3333333333%; + min-width: 1.6666666667%; } - .grid-stack > .grid-stack-item[data-gs-width="1"] { - width: 3.3333333333%; + width: 1.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="1"] { - left: 3.3333333333%; + left: 1.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="1"] { - min-width: 3.3333333333%; + min-width: 1.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="1"] { - max-width: 3.3333333333%; + max-width: 1.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="2"] { - width: 6.6666666667%; + width: 3.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="2"] { - left: 6.6666666667%; + left: 3.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="2"] { - min-width: 6.6666666667%; + min-width: 3.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="2"] { - max-width: 6.6666666667%; + max-width: 3.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="3"] { - width: 10%; + width: 5%; } .grid-stack > .grid-stack-item[data-gs-x="3"] { - left: 10%; + left: 5%; } .grid-stack > .grid-stack-item[data-gs-min-width="3"] { - min-width: 10%; + min-width: 5%; } .grid-stack > .grid-stack-item[data-gs-max-width="3"] { - max-width: 10%; + max-width: 5%; } .grid-stack > .grid-stack-item[data-gs-width="4"] { - width: 13.3333333333%; + width: 6.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="4"] { - left: 13.3333333333%; + left: 6.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="4"] { - min-width: 13.3333333333%; + min-width: 6.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="4"] { - max-width: 13.3333333333%; + max-width: 6.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="5"] { - width: 16.6666666667%; + width: 8.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="5"] { - left: 16.6666666667%; + left: 8.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="5"] { - min-width: 16.6666666667%; + min-width: 8.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="5"] { - max-width: 16.6666666667%; + max-width: 8.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="6"] { - width: 20%; + width: 10%; } .grid-stack > .grid-stack-item[data-gs-x="6"] { - left: 20%; + left: 10%; } .grid-stack > .grid-stack-item[data-gs-min-width="6"] { - min-width: 20%; + min-width: 10%; } .grid-stack > .grid-stack-item[data-gs-max-width="6"] { - max-width: 20%; + max-width: 10%; } .grid-stack > .grid-stack-item[data-gs-width="7"] { - width: 23.3333333333%; + width: 11.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="7"] { - left: 23.3333333333%; + left: 11.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="7"] { - min-width: 23.3333333333%; + min-width: 11.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="7"] { - max-width: 23.3333333333%; + max-width: 11.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="8"] { - width: 26.6666666667%; + width: 13.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="8"] { - left: 26.6666666667%; + left: 13.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="8"] { - min-width: 26.6666666667%; + min-width: 13.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="8"] { - max-width: 26.6666666667%; + max-width: 13.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="9"] { - width: 30%; + width: 15%; } .grid-stack > .grid-stack-item[data-gs-x="9"] { - left: 30%; + left: 15%; } .grid-stack > .grid-stack-item[data-gs-min-width="9"] { - min-width: 30%; + min-width: 15%; } .grid-stack > .grid-stack-item[data-gs-max-width="9"] { - max-width: 30%; + max-width: 15%; } .grid-stack > .grid-stack-item[data-gs-width="10"] { - width: 33.3333333333%; + width: 16.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="10"] { - left: 33.3333333333%; + left: 16.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="10"] { - min-width: 33.3333333333%; + min-width: 16.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="10"] { - max-width: 33.3333333333%; + max-width: 16.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="11"] { - width: 36.6666666667%; + width: 18.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="11"] { - left: 36.6666666667%; + left: 18.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="11"] { - min-width: 36.6666666667%; + min-width: 18.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="11"] { - max-width: 36.6666666667%; + max-width: 18.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="12"] { - width: 40%; + width: 20%; } .grid-stack > .grid-stack-item[data-gs-x="12"] { - left: 40%; + left: 20%; } .grid-stack > .grid-stack-item[data-gs-min-width="12"] { - min-width: 40%; + min-width: 20%; } .grid-stack > .grid-stack-item[data-gs-max-width="12"] { - max-width: 40%; + max-width: 20%; } .grid-stack > .grid-stack-item[data-gs-width="13"] { - width: 43.3333333333%; + width: 21.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="13"] { - left: 43.3333333333%; + left: 21.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="13"] { - min-width: 43.3333333333%; + min-width: 21.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="13"] { - max-width: 43.3333333333%; + max-width: 21.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="14"] { - width: 46.6666666667%; + width: 23.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="14"] { - left: 46.6666666667%; + left: 23.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="14"] { - min-width: 46.6666666667%; + min-width: 23.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="14"] { - max-width: 46.6666666667%; + max-width: 23.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="15"] { - width: 50%; + width: 25%; } .grid-stack > .grid-stack-item[data-gs-x="15"] { - left: 50%; + left: 25%; } .grid-stack > .grid-stack-item[data-gs-min-width="15"] { - min-width: 50%; + min-width: 25%; } .grid-stack > .grid-stack-item[data-gs-max-width="15"] { - max-width: 50%; + max-width: 25%; } .grid-stack > .grid-stack-item[data-gs-width="16"] { - width: 53.3333333333%; + width: 26.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="16"] { - left: 53.3333333333%; + left: 26.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="16"] { - min-width: 53.3333333333%; + min-width: 26.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="16"] { - max-width: 53.3333333333%; + max-width: 26.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="17"] { - width: 56.6666666667%; + width: 28.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="17"] { - left: 56.6666666667%; + left: 28.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="17"] { - min-width: 56.6666666667%; + min-width: 28.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="17"] { - max-width: 56.6666666667%; + max-width: 28.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="18"] { - width: 60%; + width: 30%; } .grid-stack > .grid-stack-item[data-gs-x="18"] { - left: 60%; + left: 30%; } .grid-stack > .grid-stack-item[data-gs-min-width="18"] { - min-width: 60%; + min-width: 30%; } .grid-stack > .grid-stack-item[data-gs-max-width="18"] { - max-width: 60%; + max-width: 30%; } .grid-stack > .grid-stack-item[data-gs-width="19"] { - width: 63.3333333333%; + width: 31.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="19"] { - left: 63.3333333333%; + left: 31.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="19"] { - min-width: 63.3333333333%; + min-width: 31.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="19"] { - max-width: 63.3333333333%; + max-width: 31.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="20"] { - width: 66.6666666667%; + width: 33.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="20"] { - left: 66.6666666667%; + left: 33.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="20"] { - min-width: 66.6666666667%; + min-width: 33.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="20"] { - max-width: 66.6666666667%; + max-width: 33.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="21"] { - width: 70%; + width: 35%; } .grid-stack > .grid-stack-item[data-gs-x="21"] { - left: 70%; + left: 35%; } .grid-stack > .grid-stack-item[data-gs-min-width="21"] { - min-width: 70%; + min-width: 35%; } .grid-stack > .grid-stack-item[data-gs-max-width="21"] { - max-width: 70%; + max-width: 35%; } .grid-stack > .grid-stack-item[data-gs-width="22"] { - width: 73.3333333333%; + width: 36.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="22"] { - left: 73.3333333333%; + left: 36.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="22"] { - min-width: 73.3333333333%; + min-width: 36.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="22"] { - max-width: 73.3333333333%; + max-width: 36.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="23"] { - width: 76.6666666667%; + width: 38.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="23"] { - left: 76.6666666667%; + left: 38.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="23"] { - min-width: 76.6666666667%; + min-width: 38.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="23"] { - max-width: 76.6666666667%; + max-width: 38.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="24"] { - width: 80%; + width: 40%; } .grid-stack > .grid-stack-item[data-gs-x="24"] { - left: 80%; + left: 40%; } .grid-stack > .grid-stack-item[data-gs-min-width="24"] { - min-width: 80%; + min-width: 40%; } .grid-stack > .grid-stack-item[data-gs-max-width="24"] { - max-width: 80%; + max-width: 40%; } .grid-stack > .grid-stack-item[data-gs-width="25"] { - width: 83.3333333333%; + width: 41.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="25"] { - left: 83.3333333333%; + left: 41.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="25"] { - min-width: 83.3333333333%; + min-width: 41.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="25"] { - max-width: 83.3333333333%; + max-width: 41.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="26"] { - width: 86.6666666667%; + width: 43.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="26"] { - left: 86.6666666667%; + left: 43.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="26"] { - min-width: 86.6666666667%; + min-width: 43.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="26"] { - max-width: 86.6666666667%; + max-width: 43.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="27"] { - width: 90%; + width: 45%; } .grid-stack > .grid-stack-item[data-gs-x="27"] { - left: 90%; + left: 45%; } .grid-stack > .grid-stack-item[data-gs-min-width="27"] { - min-width: 90%; + min-width: 45%; } .grid-stack > .grid-stack-item[data-gs-max-width="27"] { - max-width: 90%; + max-width: 45%; } .grid-stack > .grid-stack-item[data-gs-width="28"] { - width: 93.3333333333%; + width: 46.6666666667%; } .grid-stack > .grid-stack-item[data-gs-x="28"] { - left: 93.3333333333%; + left: 46.6666666667%; } .grid-stack > .grid-stack-item[data-gs-min-width="28"] { - min-width: 93.3333333333%; + min-width: 46.6666666667%; } .grid-stack > .grid-stack-item[data-gs-max-width="28"] { - max-width: 93.3333333333%; + max-width: 46.6666666667%; } .grid-stack > .grid-stack-item[data-gs-width="29"] { - width: 96.6666666667%; + width: 48.3333333333%; } .grid-stack > .grid-stack-item[data-gs-x="29"] { - left: 96.6666666667%; + left: 48.3333333333%; } .grid-stack > .grid-stack-item[data-gs-min-width="29"] { - min-width: 96.6666666667%; + min-width: 48.3333333333%; } .grid-stack > .grid-stack-item[data-gs-max-width="29"] { - max-width: 96.6666666667%; + max-width: 48.3333333333%; } .grid-stack > .grid-stack-item[data-gs-width="30"] { - width: 100%; + width: 50%; } .grid-stack > .grid-stack-item[data-gs-x="30"] { - left: 100%; + left: 50%; } .grid-stack > .grid-stack-item[data-gs-min-width="30"] { - min-width: 100%; + min-width: 50%; } .grid-stack > .grid-stack-item[data-gs-max-width="30"] { + max-width: 50%; + } + .grid-stack > .grid-stack-item[data-gs-width="31"] { + width: 51.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="31"] { + left: 51.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="31"] { + min-width: 51.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="31"] { + max-width: 51.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="32"] { + width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="32"] { + left: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="32"] { + min-width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="32"] { + max-width: 53.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="33"] { + width: 55%; + } + .grid-stack > .grid-stack-item[data-gs-x="33"] { + left: 55%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="33"] { + min-width: 55%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="33"] { + max-width: 55%; + } + .grid-stack > .grid-stack-item[data-gs-width="34"] { + width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="34"] { + left: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="34"] { + min-width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="34"] { + max-width: 56.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="35"] { + width: 58.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="35"] { + left: 58.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="35"] { + min-width: 58.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="35"] { + max-width: 58.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="36"] { + width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-x="36"] { + left: 60%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="36"] { + min-width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="36"] { + max-width: 60%; + } + .grid-stack > .grid-stack-item[data-gs-width="37"] { + width: 61.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="37"] { + left: 61.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="37"] { + min-width: 61.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="37"] { + max-width: 61.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="38"] { + width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="38"] { + left: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="38"] { + min-width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="38"] { + max-width: 63.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="39"] { + width: 65%; + } + .grid-stack > .grid-stack-item[data-gs-x="39"] { + left: 65%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="39"] { + min-width: 65%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="39"] { + max-width: 65%; + } + .grid-stack > .grid-stack-item[data-gs-width="40"] { + width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="40"] { + left: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="40"] { + min-width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="40"] { + max-width: 66.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="41"] { + width: 68.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="41"] { + left: 68.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="41"] { + min-width: 68.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="41"] { + max-width: 68.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="42"] { + width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-x="42"] { + left: 70%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="42"] { + min-width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="42"] { + max-width: 70%; + } + .grid-stack > .grid-stack-item[data-gs-width="43"] { + width: 71.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="43"] { + left: 71.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="43"] { + min-width: 71.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="43"] { + max-width: 71.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="44"] { + width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="44"] { + left: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="44"] { + min-width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="44"] { + max-width: 73.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="45"] { + width: 75%; + } + .grid-stack > .grid-stack-item[data-gs-x="45"] { + left: 75%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="45"] { + min-width: 75%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="45"] { + max-width: 75%; + } + .grid-stack > .grid-stack-item[data-gs-width="46"] { + width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="46"] { + left: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="46"] { + min-width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="46"] { + max-width: 76.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="47"] { + width: 78.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="47"] { + left: 78.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="47"] { + min-width: 78.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="47"] { + max-width: 78.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="48"] { + width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-x="48"] { + left: 80%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="48"] { + min-width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="48"] { + max-width: 80%; + } + .grid-stack > .grid-stack-item[data-gs-width="49"] { + width: 81.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="49"] { + left: 81.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="49"] { + min-width: 81.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="49"] { + max-width: 81.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="50"] { + width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="50"] { + left: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="50"] { + min-width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="50"] { + max-width: 83.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="51"] { + width: 85%; + } + .grid-stack > .grid-stack-item[data-gs-x="51"] { + left: 85%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="51"] { + min-width: 85%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="51"] { + max-width: 85%; + } + .grid-stack > .grid-stack-item[data-gs-width="52"] { + width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="52"] { + left: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="52"] { + min-width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="52"] { + max-width: 86.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="53"] { + width: 88.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="53"] { + left: 88.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="53"] { + min-width: 88.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="53"] { + max-width: 88.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="54"] { + width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-x="54"] { + left: 90%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="54"] { + min-width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="54"] { + max-width: 90%; + } + .grid-stack > .grid-stack-item[data-gs-width="55"] { + width: 91.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="55"] { + left: 91.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="55"] { + min-width: 91.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="55"] { + max-width: 91.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="56"] { + width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="56"] { + left: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="56"] { + min-width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="56"] { + max-width: 93.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="57"] { + width: 95%; + } + .grid-stack > .grid-stack-item[data-gs-x="57"] { + left: 95%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="57"] { + min-width: 95%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="57"] { + max-width: 95%; + } + .grid-stack > .grid-stack-item[data-gs-width="58"] { + width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-x="58"] { + left: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="58"] { + min-width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="58"] { + max-width: 96.6666666667%; + } + .grid-stack > .grid-stack-item[data-gs-width="59"] { + width: 98.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-x="59"] { + left: 98.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="59"] { + min-width: 98.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="59"] { + max-width: 98.3333333333%; + } + .grid-stack > .grid-stack-item[data-gs-width="60"] { + width: 100%; + } + .grid-stack > .grid-stack-item[data-gs-x="60"] { + left: 100%; + } + .grid-stack > .grid-stack-item[data-gs-min-width="60"] { + min-width: 100%; + } + .grid-stack > .grid-stack-item[data-gs-max-width="60"] { max-width: 100%; } \ No newline at end of file diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html index 3bfbc210d..e6f13a00c 100644 --- a/spec/e2e/html/810-many-columns.html +++ b/spec/e2e/html/810-many-columns.html @@ -20,13 +20,13 @@

    Many Columns demo

    - diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 4fbb90886..faff00466 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -126,7 +126,7 @@ describe('gridstack', function() { it('should return {x: 2, y: 5}.', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let pixel = {top: 500, left: 200}; @@ -152,7 +152,7 @@ describe('gridstack', function() { it('should return 1/12th of container width.', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, column: 12 }; let grid = GridStack.init(options); @@ -162,7 +162,7 @@ describe('gridstack', function() { it('should return 1/10th of container width.', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, column: 10 }; let grid = GridStack.init(options); @@ -180,10 +180,10 @@ describe('gridstack', function() { }); it('should start at 80 then become 120', function() { let cellHeight = 80; - let verticalMargin = 10; + let margin = 5; let options = { cellHeight: cellHeight, - verticalMargin: verticalMargin, + margin: margin, column: 12 }; let grid = GridStack.init(options); @@ -193,21 +193,21 @@ describe('gridstack', function() { expect(grid.getRow()).toBe(rows); expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); + expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * margin); grid.cellHeight( grid.getCellHeight() ); // should be no-op expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); + expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * margin); cellHeight = 120; // should change and CSS actual height grid.cellHeight( cellHeight ); expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); + expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * margin); cellHeight = 20; // should change and CSS actual height grid.cellHeight( cellHeight ); expect(grid.getCellHeight()).toBe(cellHeight); - expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * verticalMargin); + expect(parseInt(container.css('height'))).toBe(rows * cellHeight + (rows-1) * margin); }); it('should be square', function() { @@ -611,7 +611,7 @@ describe('gridstack', function() { it('should set return false.', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let shouldBeFalse = grid.isAreaEmpty(1, 1, 1, 1); @@ -620,7 +620,7 @@ describe('gridstack', function() { it('should set return true.', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let shouldBeTrue = grid.isAreaEmpty(5, 5, 1, 1); @@ -696,7 +696,7 @@ describe('gridstack', function() { it('should allow same x, y coordinates for widgets.', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, float: true }; let grid = GridStack.init(options); @@ -713,7 +713,7 @@ describe('gridstack', function() { it('should not allow same x, y coordinates for widgets.', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let items = $('.grid-stack-item'); @@ -953,7 +953,7 @@ describe('gridstack', function() { it('should cleanup gridstack', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); grid.destroy(); @@ -963,7 +963,7 @@ describe('gridstack', function() { it('should cleanup gridstack but leave elements', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); grid.destroy(false); @@ -984,7 +984,7 @@ describe('gridstack', function() { it('should resize widget', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let items = $('.grid-stack-item'); @@ -1004,7 +1004,7 @@ describe('gridstack', function() { it('should move widget', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, float: true }; let grid = GridStack.init(options); @@ -1054,7 +1054,7 @@ describe('gridstack', function() { it('should move and resize widget', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, float: true }; let grid = GridStack.init(options); @@ -1067,51 +1067,53 @@ describe('gridstack', function() { }); }); - describe('grid.verticalMargin', function() { + describe('grid.margin', function() { beforeEach(function() { document.body.insertAdjacentHTML('afterbegin', gridstackHTML); }); afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); - it('should return verticalMargin', function() { + it('should return margin', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 10 }; let grid = GridStack.init(options); - let vm = grid.getVerticalMargin(); + let vm = grid.getMargin(); expect(vm).toBe(10); }); - it('should return update verticalMargin', function() { + it('should return update margin', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); - grid.verticalMargin(11); - expect(grid.getVerticalMargin()).toBe(11); + grid.margin(11); + expect(grid.getMargin()).toBe(11); }); it('should do nothing', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 10, }; let grid = GridStack.init(options); - expect(grid.getVerticalMargin()).toBe(10); - grid.verticalMargin(10); - expect(grid.getVerticalMargin()).toBe(10); + expect(grid.getMargin()).toBe(10); + grid.margin(10); + expect(grid.getMargin()).toBe(10); }); + /* it('should not update styles', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid: any = GridStack.init(options); spyOn(grid, '_updateStyles'); - grid.verticalMargin(11, true); + grid.margin(11, false); expect(grid._updateStyles).not.toHaveBeenCalled(); }); + */ }); describe('grid.opts.rtl', function() { @@ -1124,7 +1126,7 @@ describe('gridstack', function() { it('should add grid-stack-rtl class', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, rtl: true }; let grid = GridStack.init(options); @@ -1133,7 +1135,7 @@ describe('gridstack', function() { it('should not add grid-stack-rtl class', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); expect($('.grid-stack').hasClass('grid-stack-rtl')).toBe(false); @@ -1150,7 +1152,7 @@ describe('gridstack', function() { it('should enable move for future also', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, disableDrag: true }; let grid = GridStack.init(options); @@ -1169,7 +1171,7 @@ describe('gridstack', function() { it('should disable move for existing only', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let items = $('.grid-stack-item'); @@ -1196,7 +1198,7 @@ describe('gridstack', function() { it('should enable resize', function() { let options = { cellHeight: 80, - verticalMargin: 10, + margin: 5, disableResize: true }; let grid = GridStack.init(options); @@ -1211,7 +1213,7 @@ describe('gridstack', function() { it('should disable resize', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let items = $('.grid-stack-item'); @@ -1233,7 +1235,7 @@ describe('gridstack', function() { it('should enable movable and resizable', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); let items = $('.grid-stack-item'); @@ -1261,7 +1263,7 @@ describe('gridstack', function() { it('should lock widgets', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); grid.locked('.grid-stack-item', true); @@ -1272,7 +1274,7 @@ describe('gridstack', function() { it('should unlock widgets', function() { let options = { cellHeight: 80, - verticalMargin: 10 + margin: 5 }; let grid = GridStack.init(options); grid.locked('.grid-stack-item', false); diff --git a/src/gridstack.scss b/src/gridstack.scss index a699197da..98f8fbc0a 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -6,8 +6,6 @@ */ $gridstack-columns: 12 !default; -$horizontal_padding: 20px !default; -$vertical_padding: 20px !default; $animation_speed: .3s !default; @mixin vendor($property, $value...){ @@ -35,10 +33,6 @@ $animation_speed: .3s !default; border: 1px dashed lightgray; margin: 0; position: absolute; - top: 0; - left: $horizontal_padding / 2; - right: $horizontal_padding / 2; - bottom: 0; width: auto; z-index: 0 !important; text-align: center; @@ -52,10 +46,6 @@ $animation_speed: .3s !default; > .grid-stack-item-content { margin: 0; position: absolute; - top: 0; - left: $horizontal_padding / 2; - right: $horizontal_padding / 2; - bottom: 0; width: auto; overflow-x: hidden; overflow-y: auto; @@ -95,14 +85,14 @@ $animation_speed: .3s !default; @include vendor(transform, rotate(-45deg)); } - > .ui-resizable-nw { cursor: nw-resize; width: 20px; height: 20px; left: 10px; top: 0; } + > .ui-resizable-nw { cursor: nw-resize; width: 20px; height: 20px; top: 0; } > .ui-resizable-n { cursor: n-resize; height: 10px; top: 0; left: 25px; right: 25px; } - > .ui-resizable-ne { cursor: ne-resize; width: 20px; height: 20px; right: 10px; top: 0; } - > .ui-resizable-e { cursor: e-resize; width: 10px; right: $horizontal_padding / 2; top: 15px; bottom: 15px; } - > .ui-resizable-se { cursor: se-resize; width: 20px; height: 20px; right: 10px; bottom: 0; } + > .ui-resizable-ne { cursor: ne-resize; width: 20px; height: 20px; top: 0; } + > .ui-resizable-e { cursor: e-resize; width: 10px; top: 15px; bottom: 15px; } + > .ui-resizable-se { cursor: se-resize; width: 20px; height: 20px;} > .ui-resizable-s { cursor: s-resize; height: 10px; left: 25px; bottom: 0; right: 25px; } - > .ui-resizable-sw { cursor: sw-resize; width: 20px; height: 20px; left: 10px; bottom: 0; } - > .ui-resizable-w { cursor: w-resize; width: 10px; left: $horizontal_padding / 2; top: 15px; bottom: 15px; } + > .ui-resizable-sw { cursor: sw-resize; width: 20px; height: 20px; bottom: 0; } + > .ui-resizable-w { cursor: w-resize; width: 10px; top: 15px; bottom: 15px; } &.ui-draggable-dragging { &> .ui-resizable-handle { diff --git a/src/gridstack.ts b/src/gridstack.ts index 24a7c7310..aac8b7aa5 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -131,7 +131,7 @@ export class GridStack { private _gsEventHandler = {}; /** @internal */ private _styles: GridCSSStyleSheet; - /** @internal */ + /** @internal flag to keep cells square during resize */ private _isAutoCellHeight: boolean; /** @@ -145,6 +145,7 @@ export class GridStack { obsoleteOpts(opts, 'width', 'column', 'v0.5.3'); obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3'); + obsoleteOpts(opts, 'verticalMargin', 'margin', 'v2.0'); obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead'); // container attributes @@ -169,8 +170,8 @@ export class GridStack { placeholderText: '', handle: '.grid-stack-item-content', handleClass: null, - cellHeight: 60, - verticalMargin: 20, + cellHeight: 'auto', + margin: 10, auto: true, minWidth: 768, float: false, @@ -202,13 +203,14 @@ export class GridStack { accept: '.' + (opts.itemClass || 'grid-stack-item') }, removeTimeout: 2000, - verticalMarginUnit: 'px', + marginUnit: 'px', cellHeightUnit: 'px', disableOneColumnMode: false, oneColumnModeDomSort: false }; this.opts = Utils.defaults(opts, defaults); + this.initMargin(); if (this.opts.ddPlugin === false) { this.opts.ddPlugin = GridStackDragDropPlugin; @@ -232,12 +234,13 @@ export class GridStack { this._isAutoCellHeight = (this.opts.cellHeight === 'auto'); if (this._isAutoCellHeight) { - // make the cell square initially - this.cellHeight(Math.round(this.cellWidth()), true); + // make the cell content square initially (will use resize event to keep it square) + let marginDiff = - (this.opts.marginRight as number) - (this.opts.marginLeft as number) + + (this.opts.marginTop as number) + (this.opts.marginBottom as number); + this.cellHeight(this.cellWidth() + marginDiff, false); } else { - this.cellHeight(this.opts.cellHeight, true); + this.cellHeight(this.opts.cellHeight, false); } - this.verticalMargin(this.opts.verticalMargin, true); this.el.classList.add(this.opts._class); @@ -386,12 +389,11 @@ export class GridStack { if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') { return this.opts.cellHeight as number; } - // compute the height taking margin into account (each row has margin other than last one) + // else get first cell height + // or do entire grid and # of rows ? (this.el.getBoundingClientRect().height) / parseInt(this.el.getAttribute('data-gs-current-row')) let el = this.el.querySelector('.' + this.opts.itemClass) as HTMLElement; let height = Utils.toNumber(el.getAttribute('data-gs-height')); - let verticalMargin = this.opts.verticalMargin as number; - - return Math.round((el.offsetHeight - (height - 1) * verticalMargin) / height); + return Math.round(el.offsetHeight / height); } /** @@ -400,20 +402,20 @@ export class GridStack { * Note: You can expect performance issues if call this method too often. * * @param val the cell height - * @param noUpdate (Optional) if true, styles will not be updated + * @param update (Optional) if false, styles will not be updated * * @example * grid.cellHeight(grid.cellWidth() * 1.2); */ - public cellHeight(val: numberOrString, noUpdate?: boolean): GridStack { - let heightData = Utils.parseHeight(val); - if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) { + public cellHeight(val: numberOrString, update = true): GridStack { + let data = Utils.parseHeight(val); + if (this.opts.cellHeightUnit === data.unit && this.opts.cellHeight === data.height) { return this; } - this.opts.cellHeightUnit = heightData.unit; - this.opts.cellHeight = heightData.height; + this.opts.cellHeightUnit = data.unit; + this.opts.cellHeight = data.height; - if (!noUpdate) { + if (update) { this._updateStyles(); } return this; @@ -423,7 +425,6 @@ export class GridStack { * Gets current cell width. */ public cellWidth(): number { - // TODO: take margin into account (horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html) return this.el.offsetWidth / this.opts.column; } @@ -977,28 +978,28 @@ export class GridStack { } /** - * Updates the vertical margin - see `GridstackOptions.verticalMargin` for format options. - * + * Updates the margins which will set all 4 sides at once - see `GridstackOptions.margin` for format options. * @param value new vertical margin value - * @param noUpdate (optional) if true, styles will not be updated + * Note: you can instead use `marginTop | marginBottom | marginLeft | marginRight` GridstackOptions to set the sides separately. */ - public verticalMargin(value: numberOrString, noUpdate?: boolean): GridStack { - let heightData = Utils.parseHeight(value); - - if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) { - return this; + public margin(value: numberOrString): GridStack { + let data = Utils.parseHeight(value); + if (this.opts.marginUnit === data.unit && this.opts.margin === data.height) { + return; } - this.opts.verticalMarginUnit = heightData.unit; - this.opts.verticalMargin = heightData.height; + this.opts.marginUnit = data.unit; + this.opts.marginTop = + this.opts.marginBottom = + this.opts.marginLeft = + this.opts.marginRight = + this.opts.margin = data.height; + this._updateStyles(); - if (!noUpdate) { - this._updateStyles(); - } return this; } /** returns current vertical margin value */ - public getVerticalMargin(): number { return this.opts.verticalMargin as number; } + public getMargin(): number { return this.opts.margin as number; } /** * Returns true if the height of the grid will be less the vertical @@ -1080,19 +1081,14 @@ export class GridStack { return this; } - /** @internal */ + /** @internal updated the CSS styles for row based layout and initial margin setting */ private _updateStyles(maxHeight?: number): GridStack { - if (this._styles === null || this._styles === undefined) { + if (!this._styles) { return this; } - - let prefix = '.' + this.opts._class + ' .' + this.opts.itemClass; - let getHeight; - if (maxHeight === undefined) { maxHeight = this._styles._max; } - this._initStyles(); this._updateContainerHeight(); if (!this.opts.cellHeight) { // The rest will be handled by CSS @@ -1101,49 +1097,39 @@ export class GridStack { if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep it increasing return this; } - let height = this.opts.cellHeight as number; - let margin = this.opts.verticalMargin as number; - - if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) { - getHeight = (nbRows: number, nbMargins: number) => { - return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; - } - } else { - getHeight = (nbRows: number, nbMargins: number) => { - if (!nbRows || !nbMargins) { - return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit; - } - return 'calc(' + ((height * nbRows) + this.opts.cellHeightUnit) + ' + ' + - ((margin * nbMargins) + this.opts.verticalMarginUnit) + ')'; - } - } + let cellHeight = this.opts.cellHeight as number; + let cellHeightUnit = this.opts.cellHeightUnit; + let prefix = `.${this.opts._class} > .${this.opts.itemClass}`; + // these are done once only if (this._styles._max === 0) { - Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0); + Utils.addCSSRule(this._styles, prefix, `min-height: ${cellHeight}${cellHeightUnit}`); + // content margins + let top: string = this.opts.marginTop + this.opts.marginUnit; + let bottom: string = this.opts.marginBottom + this.opts.marginUnit; + let right: string = this.opts.marginRight + this.opts.marginUnit; + let left: string = this.opts.marginLeft + this.opts.marginUnit; + let content = `${prefix} > .grid-stack-item-content`; + let placeholder = `.${this.opts._class} > .grid-stack-placeholder > .placeholder-content`; + Utils.addCSSRule(this._styles, content, `top: ${top}; right: ${right}; bottom: ${bottom}; left: ${left};`); + Utils.addCSSRule(this._styles, placeholder, `top: ${top}; right: ${right}; bottom: ${bottom}; left: ${left};`); + // resize handles offset (to match margin) + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-ne`, `right: ${right}`); + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-e`, `right: ${right}`); + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-se`, `right: ${right}; bottom: ${bottom}`); + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-nw`, `left: ${left}`); + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-w`, `left: ${left}`); + Utils.addCSSRule(this._styles, `${prefix} > .ui-resizable-sw`, `left: ${left}; bottom: ${bottom}`); } if (maxHeight > this._styles._max) { - for (let i = this._styles._max; i < maxHeight; ++i) { - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-height="' + (i + 1) + '"]', - 'height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-min-height="' + (i + 1) + '"]', - 'min-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-max-height="' + (i + 1) + '"]', - 'max-height: ' + getHeight(i + 1, i) + ';', - i - ); - Utils.insertCSSRule(this._styles, - prefix + '[data-gs-y="' + i + '"]', - 'top: ' + getHeight(i, i) + ';', - i - ); + let getHeight = (rows: number): string => (cellHeight * rows) + cellHeightUnit; + for (let i = this._styles._max + 1; i <= maxHeight; i++) { // start at 1 + let height: string = getHeight(i); + Utils.addCSSRule(this._styles, `${prefix}[data-gs-y="${i-1}"]`, `top: ${getHeight(i-1)}`); // start at 0 + Utils.addCSSRule(this._styles, `${prefix}[data-gs-height="${i}"]`, `height: ${height}`); + Utils.addCSSRule(this._styles, `${prefix}[data-gs-min-height="${i}"]`, `min-height: ${height}`); + Utils.addCSSRule(this._styles, `${prefix}[data-gs-max-height="${i}"]`, `max-height: ${height}`); } this._styles._max = maxHeight; } @@ -1154,11 +1140,10 @@ export class GridStack { private _updateContainerHeight(): GridStack { if (this.engine.batchMode) { return this; } let row = this.getRow(); // checks for minRow already - // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below + // check for css min height let cssMinHeight = parseInt(getComputedStyle(this.el)['min-height']); if (cssMinHeight > 0) { - let verticalMargin = this.opts.verticalMargin as number; - let minRow = Math.round((cssMinHeight + verticalMargin) / (this.getCellHeight() + verticalMargin)); + let minRow = Math.round(cssMinHeight / this.getCellHeight()); if (row < minRow) { row = minRow; } @@ -1169,16 +1154,9 @@ export class GridStack { return this; } let cellHeight = this.opts.cellHeight as number; - let vMargin = this.opts.verticalMargin as number; let unit = this.opts.cellHeightUnit; if (!cellHeight) { return this } - - if (unit === this.opts.verticalMarginUnit) { - this.el.style.height = (row * (cellHeight + vMargin) - vMargin) + unit; - } else { - this.el.style.height = 'calc(' + (row * cellHeight) + unit + - ' + ' + (row * (vMargin - 1) + this.opts.verticalMarginUnit) + ')'; - } + this.el.style.height = row * cellHeight + unit; return this; } @@ -1208,7 +1186,7 @@ export class GridStack { private _prepareElementsByNode(el: GridItemHTMLElement, node: GridStackNode): GridStack { // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth: number; - let cellFullHeight: number; // internal cellHeight + v-margin + let cellHeight: number; /** called when item starts moving/resizing */ let onStartMoving = (event, ui) => { @@ -1220,9 +1198,7 @@ export class GridStack { this.engine.cleanNodes(); this.engine.beginUpdate(node); cellWidth = this.cellWidth(); - let strictCellHeight = this.getCellHeight(); // heigh without v-margin - // compute height with v-margin (Note: we add 1 margin as last row is missing it) - cellFullHeight = (this.el.getBoundingClientRect().height + this.getVerticalMargin()) / parseInt(this.el.getAttribute('data-gs-current-row')); + cellHeight = this.getCellHeight(); let { target } = event; @@ -1237,11 +1213,10 @@ export class GridStack { node._beforeDragY = node.y; node._prevYPix = ui.position.top; let minHeight = (node.minHeight || 1); - let verticalMargin = this.opts.verticalMargin as number; - // mineHeight - Each row is cellHeight + verticalMargin, until last one which has no margin below + // mineHeight - Each row is cellHeight + margin this.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - this.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin); + this.dd.resizable(el, 'option', 'minHeight', cellHeight * minHeight); if (event.type === 'resizestart') { let itemElement = target.querySelector('.grid-stack-item') as HTMLElement; @@ -1256,7 +1231,7 @@ export class GridStack { /** called when item is being dragged/resized */ let dragOrResize = (event: Event, ui) => { let x = Math.round(ui.position.left / cellWidth); - let y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight); + let y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); let width; let height; @@ -1296,7 +1271,7 @@ export class GridStack { } else if (event.type === 'resize') { if (x < 0) return; width = Math.round(ui.size.width / cellWidth); - height = Math.round((ui.size.height + this.getVerticalMargin()) / cellFullHeight); + height = Math.round((ui.size.height + this.getMargin()) / cellHeight); } // width and height are undefined if not resizing let _lastTriedWidth = (width || node._lastTriedWidth); @@ -1499,8 +1474,13 @@ export class GridStack { * and remember the prev columns we used. */ private _onResizeHandler(): GridStack { + // make the cells content (minus margin) square again if (this._isAutoCellHeight) { - Utils.throttle(() => { this.cellHeight(Math.round(this.cellWidth()), false)}, 100); + Utils.throttle(() => { + let marginDiff = - (this.opts.marginRight as number) - (this.opts.marginLeft as number) + + (this.opts.marginTop as number) + (this.opts.marginBottom as number); + this.cellHeight(this.cellWidth() + marginDiff); + }, 100); } if (!this.opts.disableOneColumnMode && this.el.clientWidth <= this.opts.minWidth) { @@ -1610,12 +1590,10 @@ export class GridStack { } // if not calculate the grid size based on element outer size - // height: Each row is cellHeight + verticalMargin, until last one which has no margin below let cellWidth = this.cellWidth(); let cellHeight = this.getCellHeight(); - let verticalMargin = this.opts.verticalMargin as number; width = node && node.width ? node.width : Math.ceil(el.offsetWidth / cellWidth); - height = node && node.height ? node.height : Math.round((el.offsetHeight + verticalMargin) / (cellHeight + verticalMargin)); + height = node && node.height ? node.height : Math.round(el.offsetHeight / cellHeight); let newNode = this.engine.prepareNode({width, height, _added: false, _temporary: true}); newNode._isOutOfGrid = true; @@ -1715,6 +1693,48 @@ export class GridStack { return [els]; } + /** @internal initialize margin top/bottom/left/right and units */ + private initMargin(): GridStack { + let data = Utils.parseHeight(this.opts.margin); + this.opts.marginUnit = data.unit; + let margin = this.opts.margin = data.height; + + // see if top/bottom/left/right need to be set as well + if (this.opts.marginTop === undefined) { + this.opts.marginTop = margin; + } else { + data = Utils.parseHeight(this.opts.marginTop); + this.opts.marginTop = data.height; + delete this.opts.margin; + } + + if (this.opts.marginBottom === undefined) { + this.opts.marginBottom = margin; + } else { + data = Utils.parseHeight(this.opts.marginBottom); + this.opts.marginBottom = data.height; + delete this.opts.margin; + } + + if (this.opts.marginRight === undefined) { + this.opts.marginRight = margin; + } else { + data = Utils.parseHeight(this.opts.marginRight); + this.opts.marginRight = data.height; + delete this.opts.margin; + } + + if (this.opts.marginLeft === undefined) { + this.opts.marginLeft = margin; + } else { + data = Utils.parseHeight(this.opts.marginLeft); + this.opts.marginLeft = data.height; + delete this.opts.margin; + } + this.opts.marginUnit = data.unit; // in case side were spelled out, use those units instead... + return this; + } + // legacy method renames /** @internal */ private setGridWidth = obsolete(this, GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); diff --git a/src/types.ts b/src/types.ts index 0aa4b1fee..b4f42a72b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -91,6 +91,22 @@ export interface GridstackOptions { /** widget class (default?: 'grid-stack-item') */ itemClass?: string; + /** + * gap size between grid item and content (default?: 10). see also marginTop, marginRight,... Can be: + * an integer (px) + * a string (ex: '2em', '20px', '2rem') + */ + margin?: numberOrString; + + /** optional way to specify each individual margin side - default to margin */ + marginTop?: numberOrString; + marginRight?: numberOrString; + marginBottom?: numberOrString; + marginLeft?: numberOrString; + + /** (internal) unit for margin (default? 'px') set when `margin` is set as string with unit (ex: 2rem') */ + marginUnit?: string; + /** maximum rows amount. Default? is 0 which means no maximum rows */ maxRow?: number; @@ -146,16 +162,6 @@ export interface GridstackOptions { */ staticGrid?: boolean; - /** - * vertical gap size (default?: 20). Can be: - * an integer (px) - * a string (ex: '2em', '20px', '2rem') - */ - verticalMargin?: numberOrString; - - /** (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem') */ - verticalMarginUnit?: string; - /** @internal */ _isNested?: boolean; /** @internal */ diff --git a/src/utils.ts b/src/utils.ts index 44898efec..cdcfed996 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -108,11 +108,11 @@ export class Utils { } /** inserts a CSS rule */ - static insertCSSRule(sheet: CSSStyleSheet, selector: string, rules: string, index: number) { - if (typeof sheet.insertRule === 'function') { - sheet.insertRule(selector + '{' + rules + '}', index); - } else if (typeof sheet.addRule === 'function') { - sheet.addRule(selector, rules, index); + static addCSSRule(sheet: CSSStyleSheet, selector: string, rules: string) { + if (typeof sheet.addRule === 'function') { + sheet.addRule(selector, rules); + } else if (typeof sheet.insertRule === 'function') { + sheet.insertRule(`${selector}{${rules}}`); } } From 772387e3f386cd944f7f7324952c6480953d79ac Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Fri, 10 Jul 2020 07:38:16 -0700 Subject: [PATCH 0230/1298] #1301 spelled out usage doc include --- README.md | 20 +++++++++++++++----- demo/demo.css | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 845b5cc11..6baec6a17 100644 --- a/README.md +++ b/README.md @@ -64,21 +64,21 @@ Usage [![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) ```bash -yarn install gridstack +yarn add gridstack or npm install --save gridstack ``` ## Include -* local: +* after you install: ```html - - + + ``` -* Using CDN (minimized): +* or using CDN (minimized): ```html @@ -92,6 +92,11 @@ if you need to debug, look at the git demo/ examples for non min includes. creating items dynamically... ```html + +
    + + + +
    +

    How to integrate GridStack.js with Vue.js

    +

    + As with any virtualDOM-based framework, you need to check if Vue has + rendered the DOM (or any updates to it) before you + initialize GridStack or call its methods. As a basic example, check this + component's mounted hook. +

    +

    + If your app requires more complex render logic than the inline template + in `addWidget`, consider + makeWidget + to let Vue deal with DOM rendering. +

    +

    {{ info }}

    + +
    +
    + + + From 71099f12b5b21a317dbf46cf4e34ee1702b7ab4d Mon Sep 17 00:00:00 2001 From: Jeremy Tuloup Date: Mon, 21 Sep 2020 13:55:16 +0200 Subject: [PATCH 0269/1298] Update gridstack-extra.css in README to point to 2.0.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55c9d386a..17f6afa4b 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` From a39716674be766aa4f975c4c92119a4e76b3075a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 21 Sep 2020 10:04:34 -0700 Subject: [PATCH 0270/1298] vue.js example tweaks * added to index page and readme links, tweak to code. --- README.md | 1 + demo/index.html | 1 + demo/vuejs.html | 9 ++++----- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 17f6afa4b..78349f7e9 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,7 @@ grid.printCount(); search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... +- vue.js: see [demo](https://github.com/gridstack/gridstack.js/blob/develop/demo/vuejs.html) - ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) - AngularJS: [gridstack-angular](https://github.com/kdietrich/gridstack-angular) - Angular8: [lb-gridstack](https://github.com/pfms84/lb-gridstack) diff --git a/demo/index.html b/demo/index.html index 3d4e51cf0..47c1451eb 100644 --- a/demo/index.html +++ b/demo/index.html @@ -17,6 +17,7 @@

    Demos

  • Right-To-Left (RTL)
  • Serialization
  • Two grids
  • +
  • Vue.js
  • diff --git a/demo/vuejs.html b/demo/vuejs.html index 7a3699f5f..d693e39d7 100644 --- a/demo/vuejs.html +++ b/demo/vuejs.html @@ -39,8 +39,7 @@

    How to integrate GridStack.js with Vue.js

    > to let Vue deal with DOM rendering.

    -

    {{ info }}

    - + {{ info }}
    - + +
    From 1d0e843ad37d81568435800598b09d224359d082 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 26 Sep 2020 15:18:46 -0700 Subject: [PATCH 0276/1298] fix for resize with cellHeight in rem/em * fix for #1356 * `getCellHeight(forcePixel = false)` now take optional arg to get pixel values, which is needed during resize calculations * texting with example with "6em" "6rem" "auto" "70" and "70px" --- demo/float.html | 4 ++-- doc/CHANGES.md | 1 + src/gridstack.ts | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/demo/float.html b/demo/float.html index 74606d44d..3940ca9c8 100644 --- a/demo/float.html +++ b/demo/float.html @@ -34,8 +34,8 @@

    Float grid demo

    addEvents(grid); let items = [ - {x: 2, y: 1, width: 1, height: 2}, - {x: 2, y: 4, width: 3, height: 1}, + {x: 1, y: 1, width: 1, height: 1}, + {x: 2, y: 2, width: 3, height: 1}, {x: 4, y: 2, width: 1, height: 1}, {x: 3, y: 1, width: 1, height: 2}, {x: 0, y: 6, width: 2, height: 2} diff --git a/doc/CHANGES.md b/doc/CHANGES.md index e31f17923..857336e4b 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -43,6 +43,7 @@ Change log - fix `GridStackOptions` spelling [1359](https://github.com/gridstack/gridstack.js/issues/1359) - fix remove window resize event when `grid.destroy()` [1369](https://github.com/gridstack/gridstack.js/issues/1369) - fix nested grid resize [1361](https://github.com/gridstack/gridstack.js/issues/1361) +- fix resize with `cellHeight` '6rem' '6em' not working [1356](https://github.com/gridstack/gridstack.js/issues/1356) ## 2.0.0 (2020-09-07) diff --git a/src/gridstack.ts b/src/gridstack.ts index 62350669c..527179d4a 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -419,8 +419,9 @@ export class GridStack { /** * Gets current cell height. */ - public getCellHeight(): number { - if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') { + public getCellHeight(forcePixel = false): number { + if (this.opts.cellHeight && this.opts.cellHeight !== 'auto' && + (!forcePixel || !this.opts.cellHeightUnit || this.opts.cellHeightUnit === 'px')) { return this.opts.cellHeight as number; } // else get first cell height @@ -1209,7 +1210,7 @@ export class GridStack { this.engine.cleanNodes(); this.engine.beginUpdate(node); cellWidth = this.cellWidth(); - cellHeight = this.getCellHeight(); + cellHeight = this.getCellHeight(true); // force pixels for calculations this.placeholder.setAttribute('data-gs-x', target.getAttribute('data-gs-x')); this.placeholder.setAttribute('data-gs-y', target.getAttribute('data-gs-y')); @@ -1222,7 +1223,6 @@ export class GridStack { node._beforeDragY = node.y; node._prevYPix = ui.position.top; - // mineHeight - Each row is cellHeight + margin this.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); this.dd.resizable(el, 'option', 'minHeight', cellHeight * (node.minHeight || 1)); } From d1abf848acf5ec9eca395b9707a1295136e5cc3f Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 26 Sep 2020 18:06:48 -0700 Subject: [PATCH 0277/1298] preserve attributes dragging between grids * fix for #1367 * we now copy all nodes attributes when moving between grids --- doc/CHANGES.md | 1 + src/gridstack-engine.ts | 4 ++-- src/gridstack.ts | 32 ++++++++++++++++---------------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 857336e4b..28ef18f6a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -44,6 +44,7 @@ Change log - fix remove window resize event when `grid.destroy()` [1369](https://github.com/gridstack/gridstack.js/issues/1369) - fix nested grid resize [1361](https://github.com/gridstack/gridstack.js/issues/1361) - fix resize with `cellHeight` '6rem' '6em' not working [1356](https://github.com/gridstack/gridstack.js/issues/1356) +- fix preserve attributes (min/max/id/etc...) when dragging between grids [1367](https://github.com/gridstack/gridstack.js/issues/1367) ## 2.0.0 (2020-09-07) diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 5274c6b4f..392ea6898 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -187,6 +187,8 @@ export class GridStackEngine { */ public prepareNode(node: GridStackNode, resizing?: boolean): GridStackNode { node = node || {}; + node._id = node._id || GridStackEngine._idSeq++; + // if we're missing position, have the grid position us automatically (before we set them to 0,0) if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) { node.autoPosition = true; @@ -287,8 +289,6 @@ export class GridStackEngine { public addNode(node: GridStackNode, triggerAddEvent = false): GridStackNode { node = this.prepareNode(node); - node._id = node._id || GridStackEngine._idSeq++; - if (node.autoPosition) { this._sortNodes(); diff --git a/src/gridstack.ts b/src/gridstack.ts index 527179d4a..dbd096edc 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1152,7 +1152,7 @@ export class GridStack { // check for css min height let cssMinHeight = parseInt(getComputedStyle(this.el)['min-height']); if (cssMinHeight > 0) { - let minRow = Math.round(cssMinHeight / this.getCellHeight()); + let minRow = Math.round(cssMinHeight / this.getCellHeight(true)); if (row < minRow) { row = minRow; } @@ -1610,24 +1610,22 @@ export class GridStack { } }) .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { - let width, height; // see if we already have a node with widget/height and check for attributes - let node = el.gridstackNode; - if (!node || !node.width || !node.height) { + let node = el.gridstackNode || {}; + if (!node.width || !node.height) { let w = parseInt(el.getAttribute('data-gs-width')); - if (w > 0) { node = node || {}; node.width = w; } + if (w > 0) { node.width = w; } let h = parseInt(el.getAttribute('data-gs-height')); - if (h > 0) { node = node || {}; node.height = h; } + if (h > 0) { node.height = h; } } // if not calculate the grid size based on element outer size - let cellWidth = this.cellWidth(); - let cellHeight = this.getCellHeight(); - width = node && node.width ? node.width : Math.round(el.offsetWidth / cellWidth) || 1; - height = node && node.height ? node.height : Math.round(el.offsetHeight / cellHeight) || 1; + let width = node.width || Math.round(el.offsetWidth / this.cellWidth()) || 1; + let height = node.height || Math.round(el.offsetHeight / this.getCellHeight(true)) || 1; - let newNode = this.engine.prepareNode({width, height, _added: false, _temporary: true}); + // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific + let newNode = this.engine.prepareNode({...node, ...{width, height, _added: false, _temporary: true}}); newNode._isOutOfGrid = true; el.gridstackNode = newNode; el._gridstackNodeOrig = node; @@ -1655,7 +1653,7 @@ export class GridStack { .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => { this.placeholder.remove(); - // notify of removal from prev grid... + // notify previous grid of removal let origNode = el._gridstackNodeOrig; delete el._gridstackNodeOrig; if (origNode && origNode.grid && origNode.grid !== this) { @@ -1666,12 +1664,14 @@ export class GridStack { oGrid._triggerRemoveEvent(); } - let node: GridStackNode = el.gridstackNode; // use existing placeholder node as it's already in our list with drop location - this.engine.cleanupNode(node); // remove all internal _xyz values + let node = el.gridstackNode; // use existing placeholder node as it's already in our list with drop location + const _id = node._id; + this.engine.cleanupNode(node); // removes all internal _xyz values (including the _id so add that back) + node._id = _id; node.grid = this; this.dd.off(el, 'drag'); // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102) - // as the helper will be nuked by default (by jqueryui and here to make it the same) + // as the helper will be nuked by jqueryui otherwise if (helper !== el) { helper.remove(); el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info @@ -1699,7 +1699,7 @@ export class GridStack { } // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up - // IFF we are still there (soe application will use as placeholder and insert their real widget instead) + // IFF we are still there (some application will use as placeholder and insert their real widget instead) window.setTimeout(() => { if (node.el && node.el.parentElement) this._prepareDragDropByNode(node); }); From d4e10385f8c3d2fe429428b54bac880a24944ee9 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 26 Sep 2020 19:31:44 -0700 Subject: [PATCH 0278/1298] fix two drop shadows * fix for #393 having 2 shadows when dragging long items between 2 grids * when dragging an item into a grid, we now mark that it was added for the old grid to detect and temporarly remove the item. always wanted to fix that... --- doc/CHANGES.md | 1 + src/gridstack.ts | 41 ++++++++++++++++++++++++----------------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 28ef18f6a..4dfad4c0e 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -45,6 +45,7 @@ Change log - fix nested grid resize [1361](https://github.com/gridstack/gridstack.js/issues/1361) - fix resize with `cellHeight` '6rem' '6em' not working [1356](https://github.com/gridstack/gridstack.js/issues/1356) - fix preserve attributes (min/max/id/etc...) when dragging between grids [1367](https://github.com/gridstack/gridstack.js/issues/1367) +- fix 2 drop shadows when dragging between grids [393](https://github.com/gridstack/gridstack.js/issues/393) ## 2.0.0 (2020-09-07) diff --git a/src/gridstack.ts b/src/gridstack.ts index dbd096edc..e6163045b 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1238,24 +1238,24 @@ export class GridStack { let distance = ui.position.top - node._prevYPix; node._prevYPix = ui.position.top; Utils.updateScrollPosition(el, ui.position, distance); - if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || - (!this.engine.float && y > this.engine.getRow())) { - if (!node._temporaryRemoved) { - if (this.opts.removable === true) { - this._setupRemovingTimeout(el); - } - - x = node._beforeDragX; - y = node._beforeDragY; + // if inTrash, outside of the bounds or added to another grid (#393) temporarily remove it from us + if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || (!this.engine.float && y > this.engine.getRow()) || node._added) { + if (node._temporaryRemoved) { return; } + if (this.opts.removable === true) { + this._setupRemovingTimeout(el); + } - if (this.placeholder.parentNode === this.el) { this.el.removeChild(this.placeholder) } - this.engine.removeNode(node); - this._updateContainerHeight(); + x = node._beforeDragX; + y = node._beforeDragY; - node._temporaryRemoved = true; - } else { - return; + if (this.placeholder.parentNode === this.el) { + this.placeholder.remove(); } + this.engine.removeNode(node); + this._updateContainerHeight(); + + node._temporaryRemoved = true; + delete node._added; // no need for this now } else { this._clearRemovingTimeout(el); @@ -1290,7 +1290,9 @@ export class GridStack { /** called when the item stops moving/resizing */ let onEndMoving = (event: Event) => { - if (this.placeholder.parentNode === this.el) { this.el.removeChild(this.placeholder) } + if (this.placeholder.parentNode === this.el) { + this.placeholder.remove(); + } // if the item has moved to another grid, we're done here let target: GridItemHTMLElement = event.target as GridItemHTMLElement; @@ -1620,6 +1622,11 @@ export class GridStack { if (h > 0) { node.height = h; } } + // if the item came from another grid, let it know it was added here to removed duplicate shadow #393 + if (node.grid && node.grid !== this) { + node._added = true; + } + // if not calculate the grid size based on element outer size let width = node.width || Math.round(el.offsetWidth / this.cellWidth()) || 1; let height = node.height || Math.round(el.offsetHeight / this.getCellHeight(true)) || 1; @@ -1644,7 +1651,7 @@ export class GridStack { node.el = null; this.engine.removeNode(node); if (this.placeholder.parentNode === this.el) { - this.el.removeChild(this.placeholder); + this.placeholder.remove(); } this._updateContainerHeight(); el.gridstackNode = el._gridstackNodeOrig; From 653466a4912676b3988c22142f1119acb671dff4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 26 Sep 2020 20:00:50 -0700 Subject: [PATCH 0279/1298] rev 2.0.1 now onto 2.x work.... --- README.md | 6 +++--- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 9 files changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 78349f7e9..928ba2e24 100644 --- a/README.md +++ b/README.md @@ -96,8 +96,8 @@ alternatively in html or using CDN (minimized): ```html - - + + ``` .map files are included for debugging purposes. @@ -194,7 +194,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 4dfad4c0e..3df836c64 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [2.0.0-dev](#200-dev) +- [3.0.0-dev](#300-dev) +- [2.0.1 (2020-09-26)](#201-2020-09-26) - [2.0.0 (2020-09-07)](#200-2020-09-07) - [1.2.1 (2020-09-04)](#121-2020-09-04) - [1.2.0 (2020-08-01)](#120-2020-08-01) @@ -37,7 +38,11 @@ Change log -## 2.0.0-dev +## 3.0.0-dev + +- TBD + +## 2.0.1 (2020-09-26) - fix `minWidth()`, `minHeight()`, `maxHeight()` to set node value as well [1359](https://github.com/gridstack/gridstack.js/issues/1359) - fix `GridStackOptions` spelling [1359](https://github.com/gridstack/gridstack.js/issues/1359) diff --git a/package.json b/package.json index 467711a46..dd846d458 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "2.0.0-dev", + "version": "3.0.0-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index b7b47e3f9..1a5206f3a 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-dd.ts 2.0.0-dev @preserve +// gridstack-dd.ts 3.0.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 392ea6898..1097b3ca7 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 2.0.0-dev @preserve +// gridstack-engine.ts 3.0.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack.ts b/src/gridstack.ts index e6163045b..b0229ed62 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 2.0.0-dev @preserve +// gridstack.ts 3.0.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 6c1799046..40a1a43b2 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 2.0.0-dev @preserve +// gridstack-dd-jqueryui.ts 3.0.0-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index b914f3feb..b064d3be2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 2.0.0-dev @preserve +// types.ts 3.0.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index fe1a0e4fe..d4dcd356a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 2.0.0-dev @preserve +// utils.ts 3.0.0-dev @preserve /** * https://gridstackjs.com/ From 36483bff5a93fcb702c0127b69880983bbfcbdab Mon Sep 17 00:00:00 2001 From: rhlin Date: Sun, 27 Sep 2020 21:53:02 +0800 Subject: [PATCH 0280/1298] HTML5 DragDrop plugin implemented (#1376) * feat(h5dd): add html 5 dragdrop & resize plugin & demo. * fix(h5dd): update for merge issue --- demo/h5dragdrop.html | 129 +++++++++++++ demo/index.html | 1 + src/dragdrop/dd-base-impl.ts | 35 ++++ src/dragdrop/dd-draggable.ts | 279 ++++++++++++++++++++++++++++ src/dragdrop/dd-droppable.ts | 143 ++++++++++++++ src/dragdrop/dd-element.ts | 86 +++++++++ src/dragdrop/dd-manager.ts | 4 + src/dragdrop/dd-resizable-handle.ts | 103 ++++++++++ src/dragdrop/dd-resizable.ts | 273 +++++++++++++++++++++++++++ src/dragdrop/dd-utils.ts | 80 ++++++++ src/dragdrop/gridstack-dd-native.ts | 131 +++++++++++++ src/gridstack.ts | 12 ++ 12 files changed, 1276 insertions(+) create mode 100644 demo/h5dragdrop.html create mode 100644 src/dragdrop/dd-base-impl.ts create mode 100644 src/dragdrop/dd-draggable.ts create mode 100644 src/dragdrop/dd-droppable.ts create mode 100644 src/dragdrop/dd-element.ts create mode 100644 src/dragdrop/dd-manager.ts create mode 100644 src/dragdrop/dd-resizable-handle.ts create mode 100644 src/dragdrop/dd-resizable.ts create mode 100644 src/dragdrop/dd-utils.ts create mode 100644 src/dragdrop/gridstack-dd-native.ts diff --git a/demo/h5dragdrop.html b/demo/h5dragdrop.html new file mode 100644 index 000000000..d7e4de112 --- /dev/null +++ b/demo/h5dragdrop.html @@ -0,0 +1,129 @@ + + + + + + + + Advanced grid demo + + + + + + + + + + + + + +

    Advanced Demo

    +
    +
    +
    +
    + +
    +
    + Drop here to remove! +
    +
    +
    +
    +
    + +
    +
    + Drag me in the dashboard! +
    +
    +
    +
    +
    +
    +
    +
    1
    +
    +
    +
    I can't be moved or dragged! +
    + +
    +
    +
    +
    +

    + Drag me! +

    + +

    + ...but don't resize me! +

    +
    +
    +
    4
    +
    +
    +
    5
    +
    +
    +
    6
    +
    +
    +
    7
    +
    +
    +
    8
    +
    +
    +
    9
    +
    +
    +
    10
    +
    +
    +
    11
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 47c1451eb..b52c768ae 100644 --- a/demo/index.html +++ b/demo/index.html @@ -8,6 +8,7 @@

    Demos

    • Advance
    • +
    • Advance: use h5ddPlugin
    • AniJS
    • Column
    • Float grid
    • diff --git a/src/dragdrop/dd-base-impl.ts b/src/dragdrop/dd-base-impl.ts new file mode 100644 index 000000000..3f4b5a13d --- /dev/null +++ b/src/dragdrop/dd-base-impl.ts @@ -0,0 +1,35 @@ +export type EventCallback = (event: Event) => boolean|void; +export abstract class DDBaseImplement { + disabled = false; + private eventRegister: { + [eventName: string]: EventCallback; + } = {}; + on(event: string, callback: EventCallback): void { + this.eventRegister[event] = callback; + } + off(event: string) { + delete this.eventRegister[event]; + } + enable(): void { + this.disabled = false; + } + disable(): void { + this.disabled = true; + } + destroy() { + this.eventRegister = undefined; + } + triggerEvent(eventName: string, event: Event): boolean|void { + if (this.disabled) { return; } + if (!this.eventRegister) {return; } // used when destory before triggerEvent fire + if (this.eventRegister[eventName]) { + return this.eventRegister[eventName](event); + } + } +} + +export interface HTMLElementExtendOpt { + el: HTMLElement; + option: T; + updateOption(T): void; +} diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts new file mode 100644 index 000000000..e48f2fd7f --- /dev/null +++ b/src/dragdrop/dd-draggable.ts @@ -0,0 +1,279 @@ +import { DDManager } from './dd-manager'; +import { DDUtils } from './dd-utils'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; + +export interface DDDraggbleOpt { + appendTo?: string | HTMLElement; + containment?: string | HTMLElement; + handle?: string; + revert?: string | boolean | unknown; // TODO: not impleament yet + scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually + helper?: string | ((event: Event) => HTMLElement); + start?: (event?, ui?) => void; + stop?: (event?, ui?) => void; + drag?: (event?, ui?) => void; +}; +export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt { + static originStyleProp = ['transition','pointerEvents', 'position', + 'left', 'top', 'opacity', 'zIndex', 'width', 'height']; + el: HTMLElement; + helper: HTMLElement; + option: DDDraggbleOpt; + dragOffset; + dragElementOriginStyle; + dragFollowTimer; + mouseDownElement: HTMLElement; + dragging = false; + + constructor(el: HTMLElement, option: DDDraggbleOpt) { + super(); + this.el = el; + this.option = option || {}; + this.init(); + } + + on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + + off(event: 'drag' | 'dragstart' | 'dragstop') { + super.off(event); + } + + enable() { + super.enable(); + this.el.draggable = true; + this.el.classList.remove('ui-draggable-disabled'); + } + + disable() { + super.disable(); + this.el.draggable = false; + this.el.classList.add('ui-draggable-disabled'); + } + + updateOption(opts) { + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + } + + protected init() { + this.el.draggable = true; + this.el.classList.add('ui-draggable'); + this.el.addEventListener('mousedown', this.mouseDown); + this.el.addEventListener('dragstart', this.dragStart); + this.el.addEventListener('dragend', this.dragEnd); + this.dragThrottle = DDUtils.throttle(this.drag, 100); + } + + protected mouseDown = (event: MouseEvent) => { + this.mouseDownElement = event.target as HTMLElement; + } + + protected dragStart = (event: DragEvent) => { + if (this.option.handle && !( + this.mouseDownElement + && this.mouseDownElement.matches( + `${this.option.handle}, ${this.option.handle} > *` + ) + )) { + event.preventDefault(); + return; + } + DDManager.dragElement = this; + this.helper = this.createHelper(event); + this.dragOffset = this.getDragOffset(event, this.el, this.helper.parentElement); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstart' }); + if (this.helper !== this.el) { + this.setupDragFollowNodeNNotifyStart(ev); + } else { + this.dragFollowTimer = setTimeout(() => { + this.dragFollowTimer = undefined; + this.setupDragFollowNodeNNotifyStart(ev); + }, 0); + } + this.cancelDragGhost(event); + } + + protected setupDragFollowNodeNNotifyStart(ev) { + this.setupHelperStyle(); + document.addEventListener('dragover', this.dragThrottle, true); + if (this.option.start) { + this.option.start(ev, this.ui()); + } + this.triggerEvent('dragstart', ev); + this.dragging = true; + this.el.classList.add('ui-draggable-dragging'); + } + + protected dragThrottle: (event: DragEvent) => void; + protected drag = (event: DragEvent) => { + this.dragFollow(event); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'drag' }); + if (this.option.drag) { + this.option.drag(ev, this.ui()); + } + this.triggerEvent('drag', ev); + } + + protected dragEnd = (event: DragEvent) => { + if (this.dragFollowTimer) { + clearTimeout(this.dragFollowTimer); + this.dragFollowTimer = undefined; + return; + } else { + document.removeEventListener('dragover', this.dragThrottle, true); + } + this.dragging = false; + this.el.classList.remove('ui-draggable-dragging'); + if (this.helper === this.el) { + this.removeHelperStyle(); + } else { + this.helper.remove(); + } + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstop' }); + if (this.option.stop) { + this.option.stop(ev, this.ui()) + } + this.triggerEvent('dragstop', ev); + DDManager.dragElement = undefined; + this.helper = undefined; + this.mouseDownElement = undefined; + } + + private createHelper(event: DragEvent) { + const helperIsFunction = (typeof this.option.helper) === 'function'; + const helper = (helperIsFunction + ? (this.option.helper as ((event: Event) => HTMLElement)).apply(this.el, [event]) + : (this.option.helper === "clone" ? DDUtils.clone(this.el) : this.el) + ) as HTMLElement; + if (!document.body.contains(helper)) { + DDUtils.appendTo(helper, (this.option.appendTo === "parent" + ? this.el.parentNode + : this.option.appendTo)); + } + if (helper === this.el) { + this.dragElementOriginStyle = DDDraggble.originStyleProp.map(prop => this.el.style[prop]); + } + return helper; + } + + private setupHelperStyle() { + this.helper.style.pointerEvents = 'none'; + this.helper.style.width = this.dragOffset.width + 'px'; + this.helper.style.height = this.dragOffset.height + 'px'; + this.helper.style.transition = 'none'; // show up instancely + this.helper.style.position = 'fixed'; + this.helper.style.zIndex = '1000'; + // won't be neccessary + // this.helper.style.opacity = '0.8'; + setTimeout(()=>{ + this.helper.style.transition = null; // recover animation + }, 100); + } + + private removeHelperStyle() { + DDDraggble.originStyleProp.forEach(prop => { + this.helper.style[prop] = this.dragElementOriginStyle[prop] || null; + }); + this.dragElementOriginStyle = undefined; + } + + private dragFollow = (event: DragEvent) => { + const offset = this.dragOffset; + this.helper.style.left = event.clientX + offset.offsetLeft + 'px'; + this.helper.style.top = event.clientY + offset.offsetTop + 'px'; + } + + private cancelDragGhost(e: DragEvent) { + if (e.dataTransfer != null) { + e.dataTransfer.setData('text', ''); + } + e.dataTransfer.effectAllowed = 'move'; + if ('function' === typeof DataTransfer.prototype.setDragImage) { + e.dataTransfer.setDragImage(new Image(), 0, 0); + } else { + // ie + (e.target as HTMLElement).style.display = 'none'; + setTimeout(() => { + (e.target as HTMLElement).style.display = ''; + }); + e.stopPropagation(); + return; + } + e.stopPropagation(); + } + + private getDragOffset(event: DragEvent, el: HTMLElement, attachedParent: HTMLElement) { + // in case ancestor has transform/perspective css properies that change the viewpoint + const getViewPointFromParent = (parent) => { + if (!parent) { return null; } + const testEl = document.createElement('div'); + DDUtils.addElStyles(testEl, { + opacity: '0', + position: 'fixed', + top: 0 + 'px', + left: 0 + 'px', + width: '1px', + height: '1px', + zIndex: '-999999', + }); + parent.appendChild(testEl); + const testElPosition = testEl.getBoundingClientRect(); + parent.removeChild(testEl); + return { + offsetX: testElPosition.left, + offsetY: testElPosition.top + }; + } + const targetOffset = el.getBoundingClientRect(); + const mousePositionXY = { + x: event.clientX, + y: event.clientY + }; + const transformOffset = getViewPointFromParent(attachedParent); + return { + left: targetOffset.left, + top: targetOffset.top, + offsetLeft: - mousePositionXY.x + targetOffset.left - transformOffset.offsetX, + offsetTop: - mousePositionXY.y + targetOffset.top - transformOffset.offsetY, + width: targetOffset.width, + height: targetOffset.height + }; + } + destroy() { + if (this.dragging) { + // Destroy while draggging should remove dragend listener and manally trigger + // dragend, otherwise dragEnd can't perform dragstop becasue eventResistry is + // destoryed. + this.el.removeEventListener('dragend', this.dragEnd); + this.dragEnd({} as DragEvent); + } + this.el.draggable = false; + this.el.classList.remove('ui-draggable'); + this.el.removeEventListener('dragstart', this.dragStart); + this.el.removeEventListener('dragend', this.dragEnd); + this.el = undefined; + this.helper = undefined; + this.option = undefined; + super.destroy(); + } + + ui = () => { + const containmentEl = this.el.parentElement; + const containmentRect = containmentEl.getBoundingClientRect(); + const offset = this.helper.getBoundingClientRect(); + return { + helper: [this.helper], //The object arr representing the helper that's being dragged. + position: { + top: offset.top - containmentRect.top, + left: offset.left - containmentRect.left + }, //Current CSS position of the helper as { top, left } object + offset: { top: offset.top, left: offset.left }// Current offset position of the helper as { top, left } object. + }; + } +} + + diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts new file mode 100644 index 000000000..31e705cf7 --- /dev/null +++ b/src/dragdrop/dd-droppable.ts @@ -0,0 +1,143 @@ +import { DDDraggble } from './dd-draggable'; +import { DDManager } from './dd-manager'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; +import { DDUtils } from './dd-utils'; + +export interface DDDropableOpt { + accept?: string | ((el: HTMLElement) => boolean); + drop?: (event: DragEvent, ui) => void; + over?: (event: DragEvent, ui) => void; + out?: (event: DragEvent, ui) => void; +}; +export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt { + el: HTMLElement; + option: DDDropableOpt; + private count = 0; + private dragEl: HTMLElement; + constructor(el: HTMLElement, opts: DDDropableOpt) { + super(); + this.el = el; + this.option = opts || {}; + this.init(); + } + on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + off(event: 'drop' | 'dropover' | 'dropout') { + super.off(event); + } + enable() { + if (!this.disabled) { return; } + super.enable(); + this.el.classList.remove('ui-droppable-disabled'); + this.el.addEventListener('dragenter', this.dragEnter); + this.el.addEventListener('dragover', this.dragOver); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); + } + disable() { + if (this.disabled) { return; } + super.disable(); + this.el.classList.add('ui-droppable-disabled'); + this.el.removeEventListener('dragenter', this.dragEnter); + this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); + } + updateOption(opts) { + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + } + + protected init() { + this.el.classList.add('ui-droppable'); + this.el.addEventListener('dragenter', this.dragEnter); + this.el.addEventListener('dragover', this.dragOver); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); + } + + protected dragEnter = (event: DragEvent) => { + if (this.canDrop()) { + if (0 === this.count) { + this.dragEl = DDManager.dragElement.el; + this.dragEl.addEventListener('dragend', this.resetCount); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); + if (this.option.over) { + this.option.over(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('dropover', ev); + event.preventDefault(); + } + } + this.count++; + } + protected dragOver = (event: DragEvent) => { + if (this.canDrop()) { + event.preventDefault(); + event.stopPropagation(); + } + } + protected dragLeave = (event: DragEvent) => { + this.count--; + if (this.canDrop()) { + if (0 === this.count) { + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); + if (this.option.out) { + this.option.out(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('dropout', ev); + } + event.preventDefault(); + } + } + protected drop = (event: DragEvent) => { + if (this.canDrop()) { + const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); + if (this.option.drop) { + this.option.drop(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('drop', ev); + event.preventDefault(); + this.count = 0; + } + } + private resetCount = () => { + this.count = 0; + this.dragEl.removeEventListener('dragend', this.resetCount); + this.dragEl = undefined; + } + private canDrop() { + let accept; + if (this.option.accept && typeof this.option.accept === 'string') { + accept = (el: HTMLElement) => { + return el.matches(this.option.accept as string) + } + } else { + accept = this.option.accept as ((el: HTMLElement) => boolean); + } + return DDManager.dragElement && (!accept || accept(DDManager.dragElement.el)); + } + + destroy() { + this.el.classList.remove('ui-droppable'); + if (this.disabled) { + this.el.classList.remove('ui-droppable-disabled'); + this.el.removeEventListener('dragenter', this.dragEnter); + this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); + } + super.destroy(); + } + + ui(ddDraggble: DDDraggble) { + return { + draggable: ddDraggble.el, + ...ddDraggble.ui() + }; + } +} + diff --git a/src/dragdrop/dd-element.ts b/src/dragdrop/dd-element.ts new file mode 100644 index 000000000..1cf43ee97 --- /dev/null +++ b/src/dragdrop/dd-element.ts @@ -0,0 +1,86 @@ +import { DDResizable, DDResizableOpt } from './dd-resizable'; +import { GridItemHTMLElement } from './../types'; +import { DDDraggble, DDDraggbleOpt } from './dd-draggable'; +import { DDDropable, DDDropableOpt } from './dd-droppable'; +export interface DDElementHost extends GridItemHTMLElement { + ddElement?: DDElement; +} +export class DDElement { + static init(el) { + el.ddElement = new DDElement(el); + return el.ddElement; + } + el: DDElementHost; + ddDraggable?: DDDraggble; + ddDroppable?: DDDropable; + ddResizable?: DDResizable; + constructor(el: DDElementHost) { + this.el = el; + } + on(eventName: string, callback: (event: MouseEvent) => void) { + if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { + this.ddDraggable.on(eventName as 'drag' | 'dragstart' | 'dragstop', callback); + return; + } + if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { + this.ddDroppable.on(eventName as 'drop' | 'dropover' | 'dropout', callback); + return; + } + if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { + this.ddResizable.on(eventName as 'resizestart' | 'resize' | 'resizestop', callback); + return; + } + return; + } + off(eventName: string) { + if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { + this.ddDraggable.off(eventName as 'drag' | 'dragstart' | 'dragstop'); + return; + } + if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { + this.ddDroppable.off(eventName as 'drop' | 'dropover' | 'dropout'); + return; + } + if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { + this.ddResizable.off(eventName as 'resizestart' | 'resize' | 'resizestop'); + return; + } + return; + } + setupDraggable(opts: DDDraggbleOpt) { + if (!this.ddDraggable) { + this.ddDraggable = new DDDraggble(this.el, opts); + } else { + this.ddDraggable.updateOption(opts); + } + } + setupResizable(opts: DDResizableOpt) { + if (!this.ddResizable) { + this.ddResizable = new DDResizable(this.el, opts); + } else { + this.ddResizable.updateOption(opts); + } + } + cleanDraggable() { + if (!this.ddDraggable) { return; } + this.ddDraggable.destroy(); + this.ddDraggable = undefined; + } + setupDroppable(opts: DDDropableOpt) { + if (!this.ddDroppable) { + this.ddDroppable = new DDDropable(this.el, opts); + } else { + this.ddDroppable.updateOption(opts); + } + } + cleanDroppable() { + if (!this.ddDroppable) { return; } + this.ddDroppable.destroy(); + this.ddDroppable = undefined; + } + cleanResizable() { + if (!this.cleanResizable) { return; } + this.ddResizable.destroy(); + this.ddResizable = undefined; + } +} diff --git a/src/dragdrop/dd-manager.ts b/src/dragdrop/dd-manager.ts new file mode 100644 index 000000000..af7b4c83b --- /dev/null +++ b/src/dragdrop/dd-manager.ts @@ -0,0 +1,4 @@ +import { DDDraggble } from './dd-draggable'; +export class DDManager { + static dragElement: DDDraggble; +} diff --git a/src/dragdrop/dd-resizable-handle.ts b/src/dragdrop/dd-resizable-handle.ts new file mode 100644 index 000000000..9317f0a7f --- /dev/null +++ b/src/dragdrop/dd-resizable-handle.ts @@ -0,0 +1,103 @@ +import { DDUtils } from "./dd-utils"; + +export interface DDResizableHandleOpt { + start?: (event) => void; + move?: (event) => void; + stop?: (event) => void; +} +export class DDResizableHandle { + static prefix = 'ui-resizable-'; + el: HTMLElement; + host: HTMLElement; + option: DDResizableHandleOpt; + dir: string; + private mouseMoving = false; + private started = false; + private mouseDownEvent: MouseEvent; + constructor(host: HTMLElement, direction: string, option: DDResizableHandleOpt) { + this.host = host; + this.dir = direction; + this.option = option; + this.init(); + } + + init() { + const el = document.createElement('div'); + el.classList.add('ui-resizable-handle'); + el.classList.add(`${DDResizableHandle.prefix}${this.dir}`); + el.style.zIndex = '100'; + el.style.userSelect = 'none'; + this.el = el; + this.host.appendChild(this.el); + this.el.addEventListener('mousedown', this.mouseDown); + this.mouseMoveThrottle = DDUtils.throttle(this.mouseMove, 100); + } + + protected mouseDown = (event: MouseEvent) => { + this.mouseDownEvent = event; + setTimeout(() => { + document.addEventListener('mousemove', this.mouseMoveThrottle, true); + document.addEventListener('mouseup', this.mouseUp); + setTimeout(() => { + if (!this.mouseMoving) { + document.removeEventListener('mousemove', this.mouseMoveThrottle, true); + document.removeEventListener('mouseup', this.mouseUp); + this.mouseDownEvent = undefined; + } + }, 300); + }, 100); + } + + protected mouseMoveThrottle: (event: MouseEvent) => void; + protected mouseMove = (event: MouseEvent) => { + if (!this.started && !this.mouseMoving) { + if (this.hasMoved(event, this.mouseDownEvent)) { + this.mouseMoving = true; + this.triggleEvent('start', this.mouseDownEvent); + this.started = true; + } + } + if (this.started) { + this.triggleEvent('move', event); + } + } + + protected mouseUp = (event: MouseEvent) => { + if (this.mouseMoving) { + this.triggleEvent('stop', event); + } + document.removeEventListener('mousemove', this.mouseMoveThrottle, true); + document.removeEventListener('mouseup', this.mouseUp); + this.mouseMoving = false; + this.started = false; + this.mouseDownEvent = undefined; + } + + private hasMoved(event: MouseEvent, oEvent: MouseEvent) { + const { clientX, clientY } = event; + const { clientX: oClientX, clientY: oClientY } = oEvent; + return ( + Math.abs(clientX - oClientX) > 1 + || Math.abs(clientY - oClientY) > 1 + ); + } + + show() { + this.el.style.display = 'block'; + } + + hide() { + this.el.style.display = 'none'; + } + + destory() { + this.host.removeChild(this.el); + } + + triggleEvent(name: string, event: MouseEvent) { + if (this.option[name]) { + this.option[name](event); + } + } + +} diff --git a/src/dragdrop/dd-resizable.ts b/src/dragdrop/dd-resizable.ts new file mode 100644 index 000000000..07682d160 --- /dev/null +++ b/src/dragdrop/dd-resizable.ts @@ -0,0 +1,273 @@ +import { DDResizableHandle } from './dd-resizable-handle'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; +import { DDUtils } from './dd-utils'; +export interface DDResizableOpt { + autoHide?: boolean; + handles?: string; + maxHeight?: number; + maxWidth?: number; + minHeight?: number; + minWidth?: number; + basePosision?: 'fixed' | 'absolute'; + start?: (event: MouseEvent, ui) => void; + stop?: (event: MouseEvent, ui) => void; + resize?: (event: MouseEvent, ui) => void; +} +export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt { + static originStyleProp = ['width', 'height', 'position', 'left', 'top', 'opacity', 'zIndex']; + el: HTMLElement; + option: DDResizableOpt; + handlers: DDResizableHandle[]; + helper: HTMLElement; + originalRect; + temporalRect; + private startEvent: MouseEvent; + private elOriginStyle; + private parentOriginStylePosition; + constructor(el: HTMLElement, opts: DDResizableOpt) { + super(); + this.el = el; + this.option = opts || {}; + this.init(); + } + on(event: 'resizestart' | 'resize' | 'resizestop', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + off(event: 'resizestart' | 'resize' | 'resizestop') { + super.off(event); + } + enable() { + if (!this.disabled) { return; } + super.enable(); + this.el.classList.remove('ui-resizable-disabled'); + } + disable() { + if (this.disabled) { return; } + super.disable(); + this.el.classList.add('ui-resizable-disabled'); + } + updateOption(opts: DDResizableOpt) { + let updateHandles = false; + let updateAutoHide = false; + if (opts.handles !== this.option.handles) { + updateHandles = true; + } + if (opts.autoHide !== this.option.autoHide) { + updateAutoHide = true; + } + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + if (updateHandles) { + this.removeHandlers(); + this.setupHandlers(); + } + if (updateAutoHide) { + this.setupAutoHide(); + } + } + + protected init() { + this.el.classList.add('ui-resizable'); + this.setupAutoHide(); + this.setupHandlers(); + } + + protected setupAutoHide() { + if (this.option.autoHide) { + this.el.classList.add('ui-resizable-autohide'); + this.el.addEventListener('mouseenter', this.showHandlers); + this.el.addEventListener('mouseleave', this.hideHandlers); + } else { + this.el.classList.remove('ui-resizable-autohide'); + this.el.removeEventListener('mouseenter', this.showHandlers); + this.el.removeEventListener('mouseleave', this.hideHandlers); + } + } + + protected showHandlers = () => { + this.el.classList.remove('ui-resizable-autohide'); + } + + protected hideHandlers = () => { + this.el.classList.add('ui-resizable-autohide'); + } + + protected setupHandlers() { + let handlerDirection = this.option.handles || 'e,s,se'; + if (handlerDirection === 'all') { + handlerDirection = 'n,e,s,w,se,sw,ne,nw'; + } + this.handlers = handlerDirection.split(',') + .map(dir => dir.trim()) + .map(dir => new DDResizableHandle(this.el, dir, { + start: (event: MouseEvent) => { + this.resizeStart(event); + }, + stop: (event: MouseEvent) => { + this.resizeStop(event); + }, + move: (event: MouseEvent) => { + this.resizing(event, dir); + } + })); + } + + protected resizeStart(event: MouseEvent) { + this.originalRect = this.el.getBoundingClientRect(); + this.startEvent = event; + this.setupHelper(); + this.applyChange(); + const ev = DDUtils.initEvent(event, { type: 'resizestart', target: this.el }); + if (this.option.start) { + this.option.start(ev, this.ui()); + } + this.triggerEvent('resizestart', ev); + } + + protected resizing(event: MouseEvent, dir: string) { + this.temporalRect = this.getChange(event, dir); + this.applyChange(); + const ev = DDUtils.initEvent(event, { type: 'resize', target: this.el }); + if (this.option.resize) { + this.option.resize(ev, this.ui()); + } + this.triggerEvent('resize', ev); + } + + protected resizeStop(event: MouseEvent) { + const ev = DDUtils.initEvent(event, { type: 'resizestop', target: this.el }); + if (this.option.stop) { + this.option.stop(ev, this.ui()); + } + this.triggerEvent('resizestop', ev); + this.cleanHelper(); + this.startEvent = undefined; + this.originalRect = undefined; + this.temporalRect = undefined; + } + + private setupHelper() { + this.elOriginStyle = DDResizable.originStyleProp.map(prop => this.el.style[prop]); + this.parentOriginStylePosition = this.el.parentElement.style.position; + if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) { + this.el.parentElement.style.position = 'relative'; + } + this.el.style.position = this.option.basePosision || 'absolute'; // or 'fixed' + this.el.style.opacity = '0.8'; + this.el.style.zIndex = '1000'; + } + private cleanHelper() { + DDResizable.originStyleProp.forEach(prop => { + this.el.style[prop] = this.elOriginStyle[prop] || null; + }); + this.el.parentElement.style.position = this.parentOriginStylePosition || null; + } + private getChange(event: MouseEvent, dir: string) { + const oEvent = this.startEvent; + const newRect = { + width: this.originalRect.width, + height: this.originalRect.height, + left: this.originalRect.left, + top: this.originalRect.top + }; + const offsetH = event.clientX - oEvent.clientX; + const offsetV = event.clientY - oEvent.clientY; + + if (dir.indexOf('e') > -1) { + newRect.width += event.clientX - oEvent.clientX; + } + if (dir.indexOf('s') > -1) { + newRect.height += event.clientY - oEvent.clientY; + } + if (dir.indexOf('w') > -1) { + newRect.width -= offsetH; + newRect.left += offsetH; + } + if (dir.indexOf('n') > -1) { + newRect.height -= offsetV; + newRect.top += offsetV + } + const reshape = this.getReShapeSize(newRect.width, newRect.height); + if (newRect.width !== reshape.width) { + if (dir.indexOf('w') > -1) { + newRect.left += reshape.width - newRect.width; + } + newRect.width = reshape.width; + } + if (newRect.height !== reshape.height) { + if (dir.indexOf('n') > -1) { + newRect.top += reshape.height - newRect.height; + } + newRect.height = reshape.height; + } + return newRect; + } + + private getReShapeSize(oWidth, oHeight) { + const maxWidth = this.option.maxWidth || oWidth; + const minWidth = this.option.minWidth || oWidth; + const maxHeight = this.option.maxHeight || oHeight; + const minHeight = this.option.minHeight || oHeight; + const width = Math.min(maxWidth, Math.max(minWidth, oWidth)); + const height = Math.min(maxHeight, Math.max(minHeight, oHeight)); + return { width, height }; + } + + private applyChange() { + let containmentRect = { left: 0, top: 0, width: 0, height: 0 }; + if (this.el.style.position === 'absolute') { + const containmentEl = this.el.parentElement; + const { left, top } = containmentEl.getBoundingClientRect(); + containmentRect = { left, top, width: 0, height: 0 }; + } + Object.keys(this.temporalRect || this.originalRect).forEach(key => { + const value = this.temporalRect[key]; + this.el.style[key] = value - containmentRect[key] + 'px'; + }); + } + + protected removeHandlers() { + this.handlers.forEach(handle => handle.destory()); + this.handlers = undefined; + } + + destory() { + this.removeHandlers(); + if (this.option.autoHide) { + this.el.removeEventListener('mouseenter', this.showHandlers); + this.el.removeEventListener('mouseleave', this.hideHandlers); + } + this.el.classList.remove('ui-resizable'); + this.el = undefined; + super.destroy(); + } + + ui = () => { + const containmentEl = this.el.parentElement; + const containmentRect = containmentEl.getBoundingClientRect(); + const rect = this.temporalRect || this.originalRect; + return { + element: [this.el], // The object representing the element to be resized + helper: [], // TODO: not support yet // The object representing the helper that's being resized + originalElement: [this.el],// we dont wrap here, so simplify as this.el //The object representing the original element before it is wrapped + originalPosition: { + left: this.originalRect.left - containmentRect.left, + top: this.originalRect.top - containmentRect.top + }, // The position represented as { left, top } before the resizable is resized + originalSize: { + width: this.originalRect.width, + height: this.originalRect.height + },// The size represented as { width, height } before the resizable is resized + position: { + left: rect.left - containmentRect.left, + top: rect.top - containmentRect.top + }, // The current position represented as { left, top } + size: { + width: rect.width, + height: rect.height + } // The current size represented as { width, height } + }; + } +} diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts new file mode 100644 index 000000000..0d7260da5 --- /dev/null +++ b/src/dragdrop/dd-utils.ts @@ -0,0 +1,80 @@ +export class DDUtils { + static clone(el: HTMLElement): HTMLElement { + const node = el.cloneNode(true) as HTMLElement; + node.removeAttribute('id'); + return node; + } + + static appendTo(el: HTMLElement, parent: string | HTMLElement | Node) { + let parentNode: HTMLElement; + if (typeof parent === 'string') { + parentNode = document.querySelector(parent as string); + } else { + parentNode = parent as HTMLElement; + } + if (parentNode) { + parentNode.append(el); + } + } + static setPositionRelative(el) { + if (!(/^(?:r|a|f)/).test(window.getComputedStyle(el).position)) { + el.style.position = "relative"; + } + } + + static throttle(callback: (...args) => void, delay: number) { + let isWaiting = false; + + return (...args) => { + if (!isWaiting) { + callback(...args); + isWaiting = true; + setTimeout(function () { isWaiting = false; }, delay); + } + } + } + static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }) { + if (styles instanceof Object) { + for (const s in styles) { + if (styles.hasOwnProperty(s)) { + if (Array.isArray(styles[s])) { + // support fallback value + (styles[s] as string[]).forEach(val => { + el.style[s] = val; + }); + } else { + el.style[s] = styles[s]; + } + } + } + } + } + static copyProps(dst, src, props) { + for (let i = 0; i < props.length; i++) { + const p = props[i]; + dst[p] = src[p]; + } + } + + static initEvent(e: DragEvent|MouseEvent, info: {type: string; target?: EventTarget}) { + const kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(','); + const ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(','); + const evt = {type: info.type}; + const obj = { + button: 0, + which: 0, + buttons: 1, + bubbles: true, + cancelable: true, + originEvent: e, + target: info.target? info.target : e.target + } + if (e instanceof DragEvent) { + Object.assign(obj, {dataTransfer: e.dataTransfer}); + } + DDUtils.copyProps(evt, e, kbdProps); + DDUtils.copyProps(evt, e, ptProps); + DDUtils.copyProps(evt, obj, Object.keys(obj)); + return evt as unknown as T; + } +} diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/dragdrop/gridstack-dd-native.ts new file mode 100644 index 000000000..24b848e6b --- /dev/null +++ b/src/dragdrop/gridstack-dd-native.ts @@ -0,0 +1,131 @@ +import { DDManager } from './dd-manager'; +import { DDElement } from './dd-element'; + +import { GridStack, GridStackElement } from '../gridstack'; +import { GridStackDD, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dd'; +import { GridItemHTMLElement, DDDragInOpt } from '../types'; + +/** + * HTML 5 Native DragDrop based drag'n'drop plugin. + */ +export class GridStackDDNative extends GridStackDD { + public constructor(grid: GridStack) { + super(grid); + } + + public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + if (opts === 'disable' || opts === 'enable') { + dEl.ddResizable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddResizable) { + dEl.cleanResizable(); + } + } else if (opts === 'option') { + dEl.setupResizable({ [key]: value }); + } else { + let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : this.grid.opts.resizable.handles; + dEl.setupResizable({ + ...this.grid.opts.resizable, + ...{ handles: handles }, + ...{ + start: opts.start, + stop: opts.stop, + resize: opts.resize + } + }); + } + return this; + } + + public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { + const dEl = this.getGridStackDDElement(el); + if (opts === 'disable' || opts === 'enable') { + dEl.ddDraggable && dEl.ddDraggable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDraggable) { // error to call destroy if not there + dEl.cleanDraggable(); + } + } else if (opts === 'option') { + dEl.setupDraggable({ [key]: value }); + } else { + dEl.setupDraggable({ + ...this.grid.opts.draggable, + ...{ + containment: (this.grid.opts._isNested && !this.grid.opts.dragOut) + ? this.grid.el.parentElement + : (this.grid.opts.draggable.containment || null), + start: opts.start, + stop: opts.stop, + drag: opts.drag + } + }); + } + return this; + } + + public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + dEl.setupDraggable(opts); + return this; + } + + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + if (typeof opts.accept === 'function' && !opts._accept) { + opts._accept = opts.accept; + opts.accept = (el) => opts._accept(el); + } + if (opts === 'disable' || opts === 'enable') { + dEl.ddDroppable && dEl.ddDroppable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDroppable) { // error to call destroy if not there + dEl.cleanDroppable(); + } + } else if (opts === 'option') { + dEl.setupDroppable({ [key]: value }); + } else { + dEl.setupDroppable(opts); + } + return this; + } + + public isDroppable(el: GridItemHTMLElement): boolean { + const dEl = this.getGridStackDDElement(el); + return !!(dEl.ddDroppable); + } + + public isDraggable(el: GridStackElement): boolean { + const dEl = this.getGridStackDDElement(el); + return !!(dEl.ddDraggable); + } + + public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + dEl.on(name, (event: Event) => { + callback( + event, + DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement, + DDManager.dragElement ? DDManager.dragElement.helper : null) + }); + return this; + } + + public off(el: GridItemHTMLElement, name: string): GridStackDD { + let dEl = this.getGridStackDDElement(el); + dEl.off(name); + return this; + } + private getGridStackDDElement(el: GridStackElement): DDElement { + let dEl; + if (typeof el === 'string') { + dEl = document.querySelector(el as string); + } else { + dEl = el; + } + return dEl.ddElement ? dEl.ddElement: DDElement.init(dEl); + } +} + +// finally register ourself +GridStackDD.registerPlugin(GridStackDDNative); diff --git a/src/gridstack.ts b/src/gridstack.ts index b0229ed62..42a14cc81 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -21,6 +21,8 @@ export * from './gridstack-dd'; // TEMPORARY import the jquery-ui drag&drop since we don't have alternative yet and don't expect users to create their own yet import './jq/gridstack-dd-jqueryui'; export * from './jq/gridstack-dd-jqueryui'; +import './dragdrop/gridstack-dd-native'; +export * from './dragdrop/gridstack-dd-native'; export type GridStackElement = string | HTMLElement | GridItemHTMLElement; @@ -87,6 +89,16 @@ export class GridStack { } return el.gridstack } + /** + * Will return i-th DDPlusgin registerd in GridStackDD + * @param i i-th plugin (default to 0) + * + * @example + * let GridStackDDJQueryUI = GridStack.getDDPlugin(0); + */ + public static getDDPlugin(i = 0) { + return GridStackDD.registeredPlugins[i]; + } /** * Will initialize a list of elements (given a selector) and return an array of grids. From 996b555bd49d156143df554d33e486cc2715ca30 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 27 Sep 2020 08:35:31 -0700 Subject: [PATCH 0281/1298] HTML5 grid build support * we now have 3 webpack build targets depending on which tech you want `gridstack.all.js` - remains unchanged for now (jq ui drag&drop) `gridstack.html5.js` - new prototype HTML5 drag&drop (125k min smaller, no jquery at all) `gridstack.static.js` - smallest bundle for static grids (no drag&drop) * D&D plugins is no longer a list - last one wins * added credits, 2.0.1-dev rev number Note: main TS code no longer includes jquery based D&D, you have to import explicitly which drag&drop (we now have 2) you want in your ES6/TS include. webpack bundles include all parts as mentioned above. --- demo/h5dragdrop.html | 9 ++++----- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/dragdrop/dd-base-impl.ts | 7 +++++++ src/dragdrop/dd-draggable.ts | 7 +++++++ src/dragdrop/dd-droppable.ts | 7 +++++++ src/dragdrop/dd-element.ts | 7 +++++++ src/dragdrop/dd-manager.ts | 7 +++++++ src/dragdrop/dd-resizable-handle.ts | 7 +++++++ src/dragdrop/dd-resizable.ts | 7 +++++++ src/dragdrop/dd-utils.ts | 7 +++++++ src/dragdrop/gridstack-dd-native.ts | 7 +++++++ src/gridstack-dd.ts | 8 ++++---- src/gridstack-engine.ts | 2 +- src/gridstack.ts | 19 +------------------ src/index-html5.ts | 13 +++++++++++++ src/index-jq.ts | 13 +++++++++++++ src/index-static.ts | 11 +++++++++++ src/jq/gridstack-dd-jqueryui.ts | 8 ++++---- src/types.ts | 2 +- src/utils.ts | 2 +- webpack.config.js | 4 +++- 22 files changed, 122 insertions(+), 38 deletions(-) create mode 100644 src/index-html5.ts create mode 100644 src/index-jq.ts create mode 100644 src/index-static.ts diff --git a/demo/h5dragdrop.html b/demo/h5dragdrop.html index d7e4de112..9de4b78e7 100644 --- a/demo/h5dragdrop.html +++ b/demo/h5dragdrop.html @@ -5,7 +5,7 @@ - Advanced grid demo + HTML5 grid demo @@ -13,7 +13,7 @@ - + + + From bc480125b27fcf307e5d99a0dc8c49ee570268bc Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 11 Oct 2020 08:51:04 -0700 Subject: [PATCH 0287/1298] updated vue3 to match vue2 so easier to diff part II of #1404 --- README.md | 2 +- demo/index.html | 3 +- demo/{vuejs.html => vue2js.html} | 0 demo/vue3js.html | 51 ++++---------------------------- 4 files changed, 8 insertions(+), 48 deletions(-) rename demo/{vuejs.html => vue2js.html} (100%) diff --git a/README.md b/README.md index 7bc000569..2280b8e30 100644 --- a/README.md +++ b/README.md @@ -176,7 +176,7 @@ grid.printCount(); search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... -- vue.js: see [demo](https://github.com/gridstack/gridstack.js/blob/develop/demo/vuejs.html) +- vue.js: see [demo v3](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue3js.html) or [demo v2](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue2js.html) - ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) - AngularJS: [gridstack-angular](https://github.com/kdietrich/gridstack-angular) - Angular8: [lb-gridstack](https://github.com/pfms84/lb-gridstack) diff --git a/demo/index.html b/demo/index.html index b52c768ae..f6de9e939 100644 --- a/demo/index.html +++ b/demo/index.html @@ -18,7 +18,8 @@

      Demos

    • Right-To-Left (RTL)
    • Serialization
    • Two grids
    • -
    • Vue.js
    • +
    • Vue2.js
    • +
    • Vue3.js
    diff --git a/demo/vuejs.html b/demo/vue2js.html similarity index 100% rename from demo/vuejs.html rename to demo/vue2js.html diff --git a/demo/vue3js.html b/demo/vue3js.html index 6f07f7627..6043162d1 100644 --- a/demo/vue3js.html +++ b/demo/vue3js.html @@ -4,13 +4,10 @@ Gridstack.js Vue integration example + + - -

    How to integrate GridStack.js with Vue.js

    @@ -28,12 +25,11 @@

    How to integrate GridStack.js with Vue.js

    > to let Vue deal with DOM rendering.

    - {{ info - }} + {{ info }}
    - From 92ae97d96ee8b71deb722e35dd24f39921a5e9b5 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 13 Oct 2020 16:54:06 -0700 Subject: [PATCH 0288/1298] v2.0.2 --- README.md | 6 +++--- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/dragdrop/dd-base-impl.ts | 2 +- src/dragdrop/dd-draggable.ts | 2 +- src/dragdrop/dd-droppable.ts | 2 +- src/dragdrop/dd-element.ts | 2 +- src/dragdrop/dd-manager.ts | 2 +- src/dragdrop/dd-resizable-handle.ts | 2 +- src/dragdrop/dd-resizable.ts | 2 +- src/dragdrop/dd-utils.ts | 2 +- src/dragdrop/gridstack-dd-native.ts | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.ts | 2 +- src/index-html5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 21 files changed, 29 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 2280b8e30..90ff17f13 100644 --- a/README.md +++ b/README.md @@ -96,8 +96,8 @@ alternatively in html or using CDN (minimized): ```html - - + + ``` .map files are included for debugging purposes. @@ -194,7 +194,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 64d242fe1..2a1af01c6 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [2.0.1-dev](#201-dev) +- [2.0.2-dev](#202-dev) +- [2.0.2 (2020-10-05)](#202-2020-10-05) - [2.0.1 (2020-09-26)](#201-2020-09-26) - [2.0.0 (2020-09-07)](#200-2020-09-07) - [1.2.1 (2020-09-04)](#121-2020-09-04) @@ -38,7 +39,11 @@ Change log -## 2.0.1-dev +## 2.0.2-dev + +- TBD + +## 2.0.2 (2020-10-05) - fix `animate` to not re-create CSS style each time (should be faster too) and made it default now since so much nicer. pass `{animate: false}` grid options if you want instant again [937](https://github.com/gridstack/gridstack.js/issues/937) - fix `resizable: { handles: ...}` forcing `alwaysShowResizeHandle` behavior [1373](https://github.com/gridstack/gridstack.js/issues/1373) diff --git a/package.json b/package.json index 99903887c..b8d09ca1a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "2.0.1-dev", + "version": "2.0.2-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/dragdrop/dd-base-impl.ts b/src/dragdrop/dd-base-impl.ts index e125a8d78..aa751d18c 100644 --- a/src/dragdrop/dd-base-impl.ts +++ b/src/dragdrop/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 2.0.1-dev @preserve +// dd-base-impl.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts index 86dcc51fb..8ac438699 100644 --- a/src/dragdrop/dd-draggable.ts +++ b/src/dragdrop/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 2.0.1-dev @preserve +// dd-draggable.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts index 34d9aa929..908b179af 100644 --- a/src/dragdrop/dd-droppable.ts +++ b/src/dragdrop/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 2.0.1-dev @preserve +// dd-droppable.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-element.ts b/src/dragdrop/dd-element.ts index 05f243571..4f54aecff 100644 --- a/src/dragdrop/dd-element.ts +++ b/src/dragdrop/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 2.0.1-dev @preserve +// dd-elements.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-manager.ts b/src/dragdrop/dd-manager.ts index d1baf0ed3..6fb546326 100644 --- a/src/dragdrop/dd-manager.ts +++ b/src/dragdrop/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 2.0.1-dev @preserve +// dd-manager.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-resizable-handle.ts b/src/dragdrop/dd-resizable-handle.ts index f7c0d0dff..513978266 100644 --- a/src/dragdrop/dd-resizable-handle.ts +++ b/src/dragdrop/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 2.0.1-dev @preserve +// dd-resizable-handle.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-resizable.ts b/src/dragdrop/dd-resizable.ts index ca6f57ef3..d07558d16 100644 --- a/src/dragdrop/dd-resizable.ts +++ b/src/dragdrop/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 2.0.1-dev @preserve +// dd-resizable.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts index 492b1d051..e9a6e4788 100644 --- a/src/dragdrop/dd-utils.ts +++ b/src/dragdrop/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 2.0.1-dev @preserve +// dd-utils.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/dragdrop/gridstack-dd-native.ts index ff99b7c00..b4b9edab1 100644 --- a/src/dragdrop/gridstack-dd-native.ts +++ b/src/dragdrop/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 2.0.1-dev @preserve +// gridstack-dd-native.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 027934438..f5ca92b82 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-dd.ts 2.0.1-dev @preserve +// gridstack-dd.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 69729b0e1..423eb78d1 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 2.0.1-dev @preserve +// gridstack-engine.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack.ts b/src/gridstack.ts index 8c0b3556e..46b7b8224 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 2.0.1-dev @preserve +// gridstack.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/index-html5.ts b/src/index-html5.ts index fa44df8d7..0ae4ce62f 100644 --- a/src/index-html5.ts +++ b/src/index-html5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 2.0.1-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 2.0.2-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index a9d167215..4e7ac2d8d 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 2.0.1-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 2.0.2-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index af4327aa9..27389bf98 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 2.0.1-dev - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 2.0.2-dev - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 0faa31eee..18aaf886c 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 2.0.1-dev @preserve +// gridstack-dd-jqueryui.ts 2.0.2-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index 48985d13f..e0077026e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 2.0.1-dev @preserve +// types.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index bcbbe3af5..f6b817334 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 2.0.1-dev @preserve +// utils.ts 2.0.2-dev @preserve /** * https://gridstackjs.com/ From 5111f99ce6d88a602c37ec4e7e4e98164ca07007 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 17 Oct 2020 15:49:48 -0700 Subject: [PATCH 0289/1298] fix for static grid, enale dragging on fly * more complete fix for #858 * grid `static: true` to no longer add any drag&drop (even disabled) which should speed things up, and `setStatic(T/F)` will now correctly add it back/delete for items that need it only. * fixed JQ draggable warning if not initialized * add `GridStackWidget.html` now lets you add any HTML content when calling `grid.load()` * added demo showing static/non-static switch for debugging/info --- demo/index.html | 1 + demo/static.html | 43 +++++++++++++++++++++++++++ doc/CHANGES.md | 4 ++- doc/README.md | 1 + src/gridstack-dd.ts | 9 ++++++ src/gridstack.ts | 52 +++++++++++++++++++++------------ src/jq/gridstack-dd-jqueryui.ts | 12 ++++---- src/types.ts | 4 +++ 8 files changed, 100 insertions(+), 26 deletions(-) create mode 100644 demo/static.html diff --git a/demo/index.html b/demo/index.html index f6de9e939..60e0ab898 100644 --- a/demo/index.html +++ b/demo/index.html @@ -17,6 +17,7 @@

    Demos

  • Responsive
  • Right-To-Left (RTL)
  • Serialization
  • +
  • Static
  • Two grids
  • Vue2.js
  • Vue3.js
  • diff --git a/demo/static.html b/demo/static.html new file mode 100644 index 000000000..9058c43b3 --- /dev/null +++ b/demo/static.html @@ -0,0 +1,43 @@ + + + + + + + Static Grid + + + + + + +
    +

    Static vs can move/drag Demo

    + +

    +
    +
    + + + + diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 2a1af01c6..2fe8b39b5 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -41,7 +41,9 @@ Change log ## 2.0.2-dev -- TBD +- fix grid `static: true` to no longer add any drag&drop (even disabled) which should speed things up, and `setStatic(T/F)` will now correctly add it back/delete for items that need it only. +Also fixed JQ draggable warning if not initialized first [858](https://github.com/gridstack/gridstack.js/issues/858) +- add `GridStackWidget.html` now lets you add any HTML content when calling `grid.load()` ## 2.0.2 (2020-10-05) diff --git a/doc/README.md b/doc/README.md index 0ef0f49dd..916e3eb4b 100644 --- a/doc/README.md +++ b/doc/README.md @@ -137,6 +137,7 @@ You need to add `noResize` and `noMove` attributes to completely lock the widget - `noMove` - disable element moving - `resizeHandles` - sets resize handles for a specific widget. - `id`- (number | string) good for quick identification (for example in change event) +- `html` - (string) html content to be added when calling `grid.load()` as content inside the item ## Item attributes diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index f5ca92b82..bdfeef6d4 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -46,6 +46,15 @@ export class GridStackDD { this.grid = grid; } + /** removes any drag&drop present (called during destroy) */ + public remove(el: GridItemHTMLElement): GridStackDD { + this.draggable(el, 'destroy').resizable(el, 'destroy'); + if (el.gridstackNode) { + delete el.gridstackNode._initDD; // reset our DD init flag + } + return this; + } + public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD { return this; } diff --git a/src/gridstack.ts b/src/gridstack.ts index 46b7b8224..12a72473c 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -396,7 +396,7 @@ export class GridStack { if (typeof(addAndRemove) === 'function') { addAndRemove(w, true); } else { - this.addWidget('
    ', w); + this.addWidget(`
    ${w.html || ''}
    `, w); } } }); @@ -539,7 +539,7 @@ export class GridStack { */ public destroy(removeDOM = true): GridStack { this._updateWindowResizeEvent(true); - this.disable(); + this.setStatic(true); // permanently removes DD if (!removeDOM) { this.removeAll(removeDOM); this.el.classList.remove(this.opts._class); @@ -586,6 +586,7 @@ export class GridStack { * doEnable`s value by changing the disableDrag grid option (default: true). */ public enableMove(doEnable: boolean, includeNewWidgets = true): GridStack { + if (doEnable && this.opts.staticGrid) { return this; } // can't move a static grid! this.getGridItems().forEach(el => this.movable(el, doEnable)); if (includeNewWidgets) { this.opts.disableDrag = !doEnable; @@ -600,6 +601,7 @@ export class GridStack { * doEnable`s value by changing the disableResize grid option (default: true). */ public enableResize(doEnable: boolean, includeNewWidgets = true): GridStack { + if (doEnable && this.opts.staticGrid) { return this; } // can't size a static grid! this.getGridItems().forEach(el => this.resizable(el, doEnable)); if (includeNewWidgets) { this.opts.disableResize = !doEnable; @@ -756,6 +758,7 @@ export class GridStack { * @param val if true widget will be draggable. */ public movable(els: GridStackElement, val: boolean): GridStack { + if (val && this.opts.staticGrid) { return this; } // can't move a static grid! GridStack.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return } @@ -764,6 +767,7 @@ export class GridStack { this.dd.draggable(el, 'disable'); el.classList.remove('ui-draggable-handle'); } else { + this._prepareDragDropByNode(node); // init DD if need be this.dd.draggable(el, 'enable'); el.classList.remove('ui-draggable-handle'); } @@ -872,7 +876,7 @@ export class GridStack { // remove our DOM data (circular link) and drag&drop permanently delete el.gridstackNode; - this.dd.draggable(el, 'destroy').resizable(el, 'destroy'); + this.dd.remove(el); this.engine.removeNode(node, removeDOM, triggerEvent); @@ -895,7 +899,7 @@ export class GridStack { // always remove our DOM data (circular link) before list gets emptied and drag&drop permanently this.engine.nodes.forEach(n => { delete n.el.gridstackNode; - this.dd.draggable(n.el, 'destroy').resizable(n.el, 'destroy'); + this.dd.remove(n.el); }); this.engine.removeAll(removeDOM); this._triggerRemoveEvent(); @@ -924,6 +928,7 @@ export class GridStack { * @param val if true widget will be resizable. */ public resizable(els: GridStackElement, val: boolean): GridStack { + if (val && this.opts.staticGrid) { return this; } // can't resize a static grid! GridStack.getElements(els).forEach(el => { let node = el.gridstackNode; if (!node) { return; } @@ -931,6 +936,7 @@ export class GridStack { if (node.noResize) { this.dd.resizable(el, 'disable'); } else { + this._prepareDragDropByNode(node); // init DD if need be this.dd.resizable(el, 'enable'); } }); @@ -951,13 +957,19 @@ export class GridStack { } /** - * Toggle the grid static state. Also toggle the grid-stack-static class. - * @param staticValue if true the grid become static. + * Toggle the grid static state, which permanently removes/add Drag&Drop support, unlike disable()/enable() that just turns it off/on. + * Also toggle the grid-stack-static class. + * @param val if true the grid become static. */ - public setStatic(staticValue: boolean): GridStack { - this.opts.staticGrid = (staticValue === true); - this.enableMove(!staticValue); - this.enableResize(!staticValue); + public setStatic(val: boolean): GridStack { + if (this.opts.staticGrid === val) { return this; } + this.opts.staticGrid = val; + // either delete Drag&drop or initialize it + if (val) { + this.getGridItems().forEach(el => this.dd.remove(el)); + } else { + this.engine.nodes.forEach(n => this._prepareDragDropByNode(n)); + } this._setStaticClass(); return this; } @@ -1191,6 +1203,12 @@ export class GridStack { /** @internal prepares the element for drag&drop **/ private _prepareDragDropByNode(node: GridStackNode): GridStack { + // check if init already done or not needed (static/disabled) + if (node._initDD || this.opts.staticGrid || + ((node.noMove || this.opts.disableDrag) && (node.noResize || this.opts.disableResize))) { + return; + } + // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth: number; let cellHeight: number; @@ -1304,7 +1322,7 @@ export class GridStack { gridToNotify._gsEventHandler[event.type](event, target); } gridToNotify.engine.removedNodes.push(node); - gridToNotify.dd.draggable(el, 'destroy').resizable(el, 'destroy'); + gridToNotify.dd.remove(el); delete el.gridstackNode; // hint we're removing it next and break circular link gridToNotify._triggerRemoveEvent(); if (el.parentElement) { @@ -1350,16 +1368,14 @@ export class GridStack { stop: onEndMoving, resize: dragOrResize }); + node._initDD = true; // we've set DD support now if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) { this.dd.draggable(el, 'disable'); } - if (node.noResize || this.opts.disableResize || this.opts.staticGrid) { this.dd.resizable(el, 'disable'); } - - this._writeAttr(el, node); return this; } @@ -1379,7 +1395,7 @@ export class GridStack { let node = this._readAttr(el, { el: el, grid: this }); node = this.engine.addNode(node, triggerAddEvent); el.gridstackNode = node; - + this._writeAttr(el, node); this._prepareDragDropByNode(node); return this; } @@ -1474,7 +1490,7 @@ export class GridStack { private _setStaticClass(): GridStack { let staticClassName = 'grid-stack-static'; - if (this.opts.staticGrid === true) { + if (this.opts.staticGrid) { this.el.classList.add(staticClassName); } else { this.el.classList.remove(staticClassName); @@ -1683,9 +1699,7 @@ export class GridStack { el = el.cloneNode(true) as GridItemHTMLElement; } else { el.remove(); // reduce flicker as we change depth here, and size further down - this.dd - .draggable(el, 'destroy') - .resizable(el, 'destroy'); + this.dd.remove(el); } el.gridstackNode = node; node.el = el; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 18aaf886c..7f8b98058 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -26,9 +26,9 @@ export class GridStackDDJQueryUI extends GridStackDD { public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD { let $el: JQuery = $(el); - if (opts === 'disable' || opts === 'enable') { - $el.resizable(opts); - } else if (opts === 'destroy') { + if (opts === 'enable') { + $el.resizable().resizable(opts); + } else if (opts === 'disable' || opts === 'destroy') { if ($el.data('ui-resizable')) { // error to call destroy if not there $el.resizable(opts); } @@ -47,9 +47,9 @@ export class GridStackDDJQueryUI extends GridStackDD { public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD { let $el: JQuery = $(el); - if (opts === 'disable' || opts === 'enable') { - $el.draggable(opts); - } else if (opts === 'destroy') { + if (opts === 'enable') { + $el.draggable().draggable('enable'); + } else if (opts === 'disable' || opts === 'destroy') { if ($el.data('ui-draggable')) { // error to call destroy if not there $el.draggable(opts); } diff --git a/src/types.ts b/src/types.ts index e0077026e..841faa37d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -204,6 +204,8 @@ export interface GridStackWidget { resizeHandles?: string; /** value for `data-gs-id` stored on the widget (default?: undefined) */ id?: numberOrString; + /** html to append inside the content */ + html?: string; } /** Drag&Drop resize options */ @@ -291,4 +293,6 @@ export interface GridStackNode extends GridStackWidget { _prevYPix?: number; /** @internal */ _temporaryRemoved?: boolean; + /** @internal */ + _initDD?: boolean; } From 967faf05c59e34fc1e50735fbe25fba35fe67d5a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 26 Oct 2020 22:20:39 -0700 Subject: [PATCH 0290/1298] save() will now optionally save grid HTML content fix for #1418 * `save(saveContent = true)` now lets you optionally save the HTML content in the node property, with load() restoring it * `addWidget(opt)` now handles just passing a `GridStackWidget` which creates the default divs, simplifying your code. Old API still supported. * fixed all demos and test case to use newer API --- README.md | 17 ++++---- demo/advance.html | 65 ++++++++-------------------- demo/anijs.html | 2 +- demo/column.html | 4 +- demo/float.html | 5 ++- demo/locked.html | 3 +- demo/nested.html | 1 + demo/responsive.html | 18 +++----- demo/serialization.html | 6 +-- demo/two.html | 12 ++---- demo/vue2js.html | 17 +++----- demo/vue3js.html | 17 +++----- doc/CHANGES.md | 4 +- doc/README.md | 16 ++++--- spec/e2e/html/1155-max-row.html | 14 ++---- spec/e2e/html/810-many-columns.html | 3 +- spec/gridstack-spec.ts | 66 +++++++++++++++-------------- src/gridstack-engine.ts | 6 +-- src/gridstack.ts | 51 +++++++++++++++++----- src/types.ts | 4 +- 20 files changed, 159 insertions(+), 172 deletions(-) diff --git a/README.md b/README.md index 90ff17f13..db39abb1d 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ creating items dynamically... // ...in your script var grid = GridStack.init(); -grid.addWidget('
    Item 1
    ', {width: 2}); +grid.addWidget({width: 2, content: 'item 1'}); ``` ... or creating from list @@ -121,8 +121,8 @@ grid.addWidget('
    Item 1
    ', { // using serialize data instead of .addWidget() const serializedData = [ {x: 0, y: 0, width: 2, height: 2}, - {x: 2, y: 3, width: 3, height: 1}, - {x: 1, y: 3, width: 1, height: 1} + {x: 2, y: 3, width: 3, content: 'item 2'}, + {x: 1, y: 3} ]; grid.load(serializedData); @@ -370,12 +370,13 @@ v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes a 1. In general methods that used no args (getter) vs setter can't be used in TS when the arguments differ (set/get are also not function calls so API would have changed). Instead we decided to have all set methods return `GridStack` to they can be chain-able (ex: `grid.float(true).cellHeight(10).column(6)`). Also legacy methods that used to take many parameters will now take a single object (typically `GridStackOptions` or `GridStackWidget`). -``` +```js `addWidget(el, x, y, width, height)` --> `addWidget(el, {with: 2})` -`float()` to get value --> `getFloat()` -'cellHeight()` to get value --> `getCellHeight()` -'verticalMargin' is now 'margin' grid options and API that applies to all 4 sides. -'verticalMargin()` to get value --> `getMargin()` +// Note: in 2.1.x you can now just do addWidget({with: 2, content: "text"}) +`float()` --> `getFloat()` // to get value +`cellHeight()` --> `getCellHeight()` // to get value +`verticalMargin` --> `margin` // grid options and API that applies to all 4 sides. +`verticalMargin()` --> `getMargin()` // to get value ``` 2. event signatures are generic and not jquery-ui dependent anymore. `gsresizestop` has been removed as `resizestop|dragstop` are now called **after** the DOM attributes have been updated. diff --git a/demo/advance.html b/demo/advance.html index d90cee5a2..76cde9696 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -20,7 +20,6 @@ opacity: 0.8; filter: blur(5px); } - #trash { background: rgba(255, 0, 0, 0.4); } @@ -51,57 +50,12 @@

    Advanced Demo

    -
    -
    -
    1
    -
    -
    -
    I can't be moved or dragged! -
    - -
    -
    -
    -
    -

    - Drag me! -

    - -

    - ...but don't resize me! -

    -
    -
    -
    4
    -
    -
    -
    5
    -
    -
    -
    6
    -
    -
    -
    7
    -
    -
    -
    8
    -
    -
    -
    9
    -
    -
    -
    10
    -
    -
    -
    11
    -
    -
    +
    diff --git a/spec/e2e/html/810-many-columns.html b/spec/e2e/html/810-many-columns.html index e6f13a00c..66a2a811f 100644 --- a/spec/e2e/html/810-many-columns.html +++ b/spec/e2e/html/810-many-columns.html @@ -31,8 +31,7 @@

    Many Columns demo

    let grid = GridStack.init(options); addNewWidget = function() { - grid.addWidget('
    ' + count + '
    ', {id: count}); - count++ + grid.addWidget({content: String(count++)}); }; grid.batchUpdate(); diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 7e8aacbcb..93b53d5cb 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -8,10 +8,10 @@ describe('gridstack', function() { let gridHTML = '
    ' + '
    ' + - '
    item 1
    ' + + '
    item 1 text
    ' + '
    ' + '
    ' + - '
    item 2
    ' + + '
    item 2 text
    ' + '
    ' + '
    '; let gridstackHTML = @@ -301,7 +301,7 @@ describe('gridstack', function() { expect(parseInt(el2.attr('data-gs-height'))).toBe(4); // add default 1x1 item to the end (1 column) - let el3 = $(grid.addWidget(widgetHTML)); + let el3 = $(grid.addWidget()); expect(el3).not.toBe(null); expect(parseInt(el3.attr('data-gs-x'))).toBe(0); expect(parseInt(el3.attr('data-gs-y'))).toBe(6); @@ -400,9 +400,9 @@ describe('gridstack', function() { let grid = GridStack.init(options); grid.batchUpdate(); grid.batchUpdate(); - let el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); - let el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); - let el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); + let el1 = $(grid.addWidget({width:1, height:1})); + let el2 = $(grid.addWidget({x:2, y:0, width:2, height:1})); + let el3 = $(grid.addWidget({x:1, y:0, width:1, height:2})); grid.commit(); grid.commit(); @@ -446,9 +446,9 @@ describe('gridstack', function() { float: true }; let grid = GridStack.init(options); - let el1 = $(grid.addWidget(widgetHTML, {width:1, height:1})); - let el2 = $(grid.addWidget(widgetHTML, {x:2, y:0, width:2, height:1})); - let el3 = $(grid.addWidget(widgetHTML, {x:1, y:0, width:1, height:2})); + let el1 = $(grid.addWidget({width:1, height:1})); + let el2 = $(grid.addWidget({x:2, y:0, width:2, height:1})); + let el3 = $(grid.addWidget({x:1, y:0, width:1, height:2})); // items are item1[1x1], item3[1x1], item2[2x1] expect(parseInt(el1.attr('data-gs-x'))).toBe(0); @@ -572,7 +572,7 @@ describe('gridstack', function() { expect(grid.getRow()).toBe(4); expect(grid.opts.minRow).toBe(4); expect(grid.opts.maxRow).toBe(4); - grid.addWidget(widgetHTML, {height: 6}); + grid.addWidget({height: 6}); expect(grid.engine.getRow()).toBe(4); expect(grid.getRow()).toBe(4); }); @@ -756,7 +756,7 @@ describe('gridstack', function() { }); it('should keep all widget options the same (autoPosition off', function() { let grid = GridStack.init({float: true});; - let widget = grid.addWidget(widgetHTML, {x: 6, y:7, width:2, height:3, autoPosition:false, + let widget = grid.addWidget({x: 6, y:7, width:2, height:3, autoPosition:false, minWidth:1, maxWidth:4, minHeight:2, maxHeight:5, id:'coolWidget'}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(6); @@ -810,7 +810,7 @@ describe('gridstack', function() { }); it('should change x, y coordinates for widgets.', function() { let grid = GridStack.init({float: true}); - let widget = grid.addWidget(widgetHTML, {x:9, y:7, width:2, height:3, autoPosition:true}); + let widget = grid.addWidget({x:9, y:7, width:2, height:3, autoPosition:true}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).not.toBe(9); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).not.toBe(7); @@ -826,7 +826,7 @@ describe('gridstack', function() { }); it('should autoPosition (missing X,Y)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {height: 2, id: 'optionWidget'}); + let widget = grid.addWidget({height: 2, id: 'optionWidget'}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -841,7 +841,7 @@ describe('gridstack', function() { }); it('should autoPosition (missing X)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {y: 9, height: 2, id: 'optionWidget'}); + let widget = grid.addWidget({y: 9, height: 2, id: 'optionWidget'}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -856,7 +856,7 @@ describe('gridstack', function() { }); it('should autoPosition (missing Y)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {x: 9, height: 2, id: 'optionWidget'}); + let widget = grid.addWidget({x: 9, height: 2, id: 'optionWidget'}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -871,7 +871,7 @@ describe('gridstack', function() { }); it('should autoPosition (correct X, missing Y)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {x: 8, height: 2, id: 'optionWidget'}); + let widget = grid.addWidget({x: 8, height: 2, id: 'optionWidget'}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -886,7 +886,7 @@ describe('gridstack', function() { }); it('should autoPosition (empty options)', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {}); + let widget = grid.addWidget(); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -910,7 +910,7 @@ describe('gridstack', function() { }); it('bad string options should use default', function() { let grid = GridStack.init(); - let widget = grid.addWidget(widgetHTML, {x: 'foo', y: null, width: 'bar', height: ''} as any); + let widget = grid.addWidget({x: 'foo', y: null, width: 'bar', height: ''} as any); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); @@ -919,16 +919,16 @@ describe('gridstack', function() { }); it('null options should clear x position', function() { let grid = GridStack.init({float: true}); - let widgetHTML = '
    '; - let widget = grid.addWidget(widgetHTML, {x:null, y:null, width:undefined}); + let HTML = '
    '; + let widget = grid.addWidget(HTML, {x:null, y:null, width:undefined}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(8); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(0); }); it('width attr should be retained', function() { // #1276 let grid = GridStack.init({float: true}); - let widgetHTML = '
    '; - let widget = grid.addWidget(widgetHTML, {x: 1, y: 5}); + let HTML = '
    '; + let widget = grid.addWidget(HTML, {x: 1, y: 5}); expect(parseInt(widget.getAttribute('data-gs-x'), 10)).toBe(1); expect(parseInt(widget.getAttribute('data-gs-y'), 10)).toBe(5); expect(parseInt(widget.getAttribute('data-gs-width'), 10)).toBe(3); @@ -1392,7 +1392,7 @@ describe('gridstack', function() { it('should move all 3 items to top-left with no space', function() { let grid = GridStack.init({float: true}); - let el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5})); + let el3 = $(grid.addWidget({x: 3, y: 5})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1403,7 +1403,7 @@ describe('gridstack', function() { it('not move locked item', function() { let grid = GridStack.init({float: true}); - let el3 = $(grid.addWidget(widgetHTML, {x: 3, y: 5, locked: true, noMove: true})); + let el3 = $(grid.addWidget({x: 3, y: 5, locked: true, noMove: true})); expect(parseInt(el3.attr('data-gs-x'))).toBe(3); expect(parseInt(el3.attr('data-gs-y'))).toBe(5); @@ -1422,11 +1422,11 @@ describe('gridstack', function() { }); it('not move locked item, size down added one', function() { let grid = GridStack.init(); - let el1 = $(grid.addWidget(widgetHTML, {x: 0, y: 1, width: 12, height: 1, locked: true})); + let el1 = $(grid.addWidget({x: 0, y: 1, width: 12, height: 1, locked: true})); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(1); - let el2 = $(grid.addWidget(widgetHTML, {x: 2, y: 0, height: 3})); + let el2 = $(grid.addWidget({x: 2, y: 0, height: 3})); expect(parseInt(el1.attr('data-gs-x'))).toBe(0); expect(parseInt(el1.attr('data-gs-y'))).toBe(1); expect(parseInt(el2.attr('data-gs-x'))).toBe(2); @@ -1541,31 +1541,35 @@ describe('gridstack', function() { }); it('save layout', function() { let grid = GridStack.init(); - let layout = grid.save(); + let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, width:4, height:2, id:'item1'}, {x:4, y:0, width:4, height:4, id:'item2'}]); + layout = grid.save(); + expect(layout).toEqual([{x:0, y:0, width:4, height:2, id:'item1', content:'item 1 text'}, {x:4, y:0, width:4, height:4, id:'item2', content:'item 2 text'}]); + layout = grid.save(true); + expect(layout).toEqual([{x:0, y:0, width:4, height:2, id:'item1', content:'item 1 text'}, {x:4, y:0, width:4, height:4, id:'item2', content:'item 2 text'}]); }); it('load move 1 item, delete others', function() { let grid = GridStack.init(); grid.load([{x:2, height:1, id:'item2'}]); - let layout = grid.save(); + let layout = grid.save(false); expect(layout).toEqual([{x:2, y:0, width:4, height:1, id:'item2'}]); }); it('load add new, delete others', function() { let grid = GridStack.init(); grid.load([{width:2, height:1, id:'item3'}], true); - let layout = grid.save(); + let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, width:2, height:1, id:'item3'}]); }); it('load size 1 item only', function() { let grid = GridStack.init(); grid.load([{height:3, id:'item1'}], false); - let layout = grid.save(); + let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, width:4, height:3, id:'item1'}, {x:4, y:0, width:4, height:4, id:'item2'}]); }); it('load size 1 item only with callback', function() { let grid = GridStack.init(); grid.load([{height:3, id:'item1'}], () => {}); - let layout = grid.save(); + let layout = grid.save(false); expect(layout).toEqual([{x:0, y:0, width:4, height:3, id:'item1'}, {x:4, y:0, width:4, height:4, id:'item2'}]); }); }); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 423eb78d1..35fcc4802 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -471,14 +471,14 @@ export class GridStackEngine { } /** saves the current layout returning a list of widgets for serialization */ - public save(): GridStackWidget[] { - let widgets: GridStackWidget[] = []; + public save(saveElement = true): GridStackNode[] { + let widgets: GridStackNode[] = []; Utils.sort(this.nodes); this.nodes.forEach(n => { let w: GridStackNode = {}; for (let key in n) { if (key[0] !== '_' && n[key] !== null && n[key] !== undefined ) w[key] = n[key]; } // delete other internals - delete w.el; + if (!saveElement) delete w.el; delete w.grid; // delete default values (will be re-created on read) if (!w.autoPosition) delete w.autoPosition; diff --git a/src/gridstack.ts b/src/gridstack.ts index 12a72473c..fd0918d49 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -318,32 +318,47 @@ export class GridStack { * * @example * let grid = GridStack.init(); - * grid.addWidget('
    hello
    ', {width: 3}); + * grid.addWidget({width: 3, content: 'hello'}); + * grid.addWidget('
    hello
    ', {width: 3}); * - * @param el html element or string definition to add - * @param options widget position/size options (optional) - see GridStackWidget + * @param el html element, or string definition, or GridStackWidget (which can have content string as well) to add + * @param options widget position/size options (optional, and ignore if first param is already option) - see GridStackWidget */ - public addWidget(el: GridStackElement, options?: GridStackWidget): GridItemHTMLElement { + public addWidget(els?: GridStackWidget | GridStackElement, options?: GridStackWidget): GridItemHTMLElement { // support legacy call for now ? if (arguments.length > 2) { - console.warn('gridstack.ts: `addWidget(el, x, y, width...)` is deprecated. Use `addWidget(el, {x, y, width,...})`. It will be removed soon'); + console.warn('gridstack.ts: `addWidget(el, x, y, width...)` is deprecated. Use `addWidget({x, y, width, content, ...})`. It will be removed soon'); // eslint-disable-next-line prefer-rest-params let a = arguments, i = 1, opt: GridStackWidget = { x:a[i++], y:a[i++], width:a[i++], height:a[i++], autoPosition:a[i++], minWidth:a[i++], maxWidth:a[i++], minHeight:a[i++], maxHeight:a[i++], id:a[i++] }; - return this.addWidget(el, opt); + return this.addWidget(els, opt); } - if (typeof el === 'string') { + function isGridStackWidget(w: GridStackWidget): w is GridStackWidget { // https://medium.com/ovrsea/checking-the-type-of-an-object-in-typescript-the-type-guards-24d98d9119b0 + return w.x !== undefined || w.y !== undefined || w.width !== undefined || w.height !== undefined || w.content !== undefined ? true : false; + } + + let el: HTMLElement; + if (typeof els === 'string') { + let doc = document.implementation.createHTMLDocument(); + doc.body.innerHTML = els; + el = doc.body.children[0] as HTMLElement; + } else if (arguments.length === 0 || arguments.length === 1 && isGridStackWidget(els)) { + let content = els ? (els as GridStackWidget).content || '' : ''; + options = els; let doc = document.implementation.createHTMLDocument(); - doc.body.innerHTML = el; + doc.body.innerHTML = `
    ${content}
    `; el = doc.body.children[0] as HTMLElement; + } else { + el = els as HTMLElement; } // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos // as the actual value are filled in when _prepareElement() calls el.getAttribute('data-gs-xyz) before adding the node. if (options) { + options = {...options}; // make a copy before we modify in case caller re-uses it // make sure we load any DOM attributes that are not specified in passed in options (which override) let domAttr = this._readAttr(el); Utils.defaults(options, domAttr); @@ -356,7 +371,21 @@ export class GridStack { } /** saves the current layout returning a list of widgets for serialization */ - public save(): GridStackWidget[] { return this.engine.save(); } + public save(saveContent = true): GridStackWidget[] { + let list = this.engine.save(saveContent); + // check for HTML content as well + if (saveContent) { + list.forEach(n => { + if (n.el) { + let sub = n.el.querySelector('.grid-stack-item-content'); + n.content = sub ? sub.innerHTML : undefined; + if (!n.content) delete n.content; + delete n.el; + } + }); + } + return list; + } /** * load the widgets from a list. This will call update() on each (matching by id) or add/remove widgets that are not there. @@ -396,7 +425,7 @@ export class GridStack { if (typeof(addAndRemove) === 'function') { addAndRemove(w, true); } else { - this.addWidget(`
    ${w.html || ''}
    `, w); + this.addWidget(w); } } }); @@ -1030,7 +1059,7 @@ export class GridStack { * * @example * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, newNode.autoPosition)) { - * grid.addWidget(newNode.el, newNode); + * grid.addWidget(newNode); * } else { * alert('Not enough free space to place the widget'); * } diff --git a/src/types.ts b/src/types.ts index 841faa37d..ed4461ccc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -204,8 +204,8 @@ export interface GridStackWidget { resizeHandles?: string; /** value for `data-gs-id` stored on the widget (default?: undefined) */ id?: numberOrString; - /** html to append inside the content */ - html?: string; + /** html to append inside as content */ + content?: string; } /** Drag&Drop resize options */ From b4ce41c952f9188553d5d3d3477f105bc7671e7a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 27 Oct 2020 00:53:38 -0700 Subject: [PATCH 0291/1298] column(n) re-layout options to not scale/move * fix for #1338 and likely #1332 * add `LayoutOptions` to `column()` for multiple re-layout options, including 'none' that will preserve the x and width, until out of bound/overlap * Possible values: 'moveScale' | 'move' | 'scale' | 'none' * update demos to have dropdown choices, and test cases --- README.md | 7 ++++--- demo/column.html | 14 ++++++++++++-- demo/responsive.html | 20 +++++++++++++++----- doc/CHANGES.md | 1 + doc/README.md | 12 +++++++----- spec/gridstack-spec.ts | 30 +++++++++++++++++++++++------- src/gridstack-engine.ts | 13 +++++++++---- src/gridstack.ts | 13 ++++++------- src/types.ts | 4 ++++ 9 files changed, 81 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index db39abb1d..e435ad021 100644 --- a/README.md +++ b/README.md @@ -344,12 +344,13 @@ grid.on('added', function(e, items) {/* items contains info */}); var grid = el.gridstack; // where el = document.querySelector('.grid-stack') or other ways... ``` Other changes -``` + +```js `GridStackUI` --> `GridStack` `GridStackUI.GridStackEngine` --> `GridStack.Engine` -`grid.container` (jquery grid wrapper) --> `grid.el` (grid DOM element) +`grid.container` (jquery grid wrapper) --> `grid.el` // (grid DOM element) `grid.grid` (GridStackEngine) --> `grid.engine` -`grid.setColumn(N)` --> `grid.column(N)` and new `grid.column()` to get value, old API still supported though +`grid.setColumn(N)` --> `grid.column(N)` and `grid.column()` // to get value, old API still supported though ``` Recommend looking at the [many samples](./demo) for more code examples. diff --git a/demo/column.html b/demo/column.html index cb8f6c09a..2efb47d0f 100644 --- a/demo/column.html +++ b/demo/column.html @@ -14,6 +14,15 @@

    column() grid demo

    Number of Columns: 12
    +
    + + +
    Add Widget 1 Column @@ -33,6 +42,7 @@

    column() grid demo

    diff --git a/doc/CHANGES.md b/doc/CHANGES.md index cae00cf87..7bccfef70 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -46,7 +46,8 @@ Also fixed JQ draggable warning if not initialized first [858](https://github.co - add `addWidget(opt)` now handles just passing a `GridStackWidget` which creates the default divs, simplifying your code. Old API still supported. - add `save(saveContent = true)` now lets you optionally save the HTML content in the node property, with load() restoring it [1418](https://github.com/gridstack/gridstack.js/issues/1418) - add `GridStackWidget.content` now lets you add any HTML content when calling `load()/save()` or `addWidget()` [1418](https://github.com/gridstack/gridstack.js/issues/1418) -- add `LayoutOptions` to `column()` for multiple re-layout options, including 'none' that will preserve the x and width, until out of bound/overlap [1338](https://github.com/gridstack/gridstack.js/issues/1338) +- add `ColumnOptions` to `column(n, options)` for multiple re-layout options, including 'none' that will preserve the x and width, until out of bound/overlap [1338](https://github.com/gridstack/gridstack.js/issues/1338) +including a custom function for you to create the new layout [1332](https://github.com/gridstack/gridstack.js/issues/1332) ## 2.0.2 (2020-10-05) diff --git a/doc/README.md b/doc/README.md index 1166fc483..4d2a31d1f 100644 --- a/doc/README.md +++ b/doc/README.md @@ -27,7 +27,7 @@ gridstack.js API - [cellHeight(val: number, update = true)](#cellheightval-number-update--true) - [cellWidth()](#cellwidth) - [commit()](#commit) - - [column(column: number, layout: LayoutOptions = 'moveScale')](#columncolumn-number-layout-layoutoptions--movescale) + - [column(column: number, layout: ColumnOptions = 'moveScale')](#columncolumn-number-layout-columnoptions--movescale) - [destroy([removeDOM])](#destroyremovedom) - [disable()](#disable) - [enable()](#enable) @@ -298,7 +298,7 @@ Gets current cell width (grid width / # of columns). Ends batch updates. Updates DOM nodes. You must call it after `batchUpdate()`. -### column(column: number, layout: LayoutOptions = 'moveScale') +### column(column: number, layout: ColumnOptions = 'moveScale') set/get the number of columns in the grid. Will update existing widgets to conform to new number of columns, as well as cache the original layout so you can revert back to previous positions without loss. @@ -308,7 +308,9 @@ else you will need to generate correct CSS (see https://github.com/gridstack/gri - `column` - Integer > 0 (default 12), if missing it will return the current count instead. - `layout` - specify the type of re-layout that will happen (position, size, etc...). Note: items will never be outside of the current column boundaries. default ('moveScale'). Ignored for 1 column. -Possible values: 'moveScale' | 'move' | 'scale' | 'none' +Possible values: 'moveScale' | 'move' | 'scale' | 'none' | (column: number, oldColumn: number, nodes: GridStackNode[], oldNodes: GridStackNode[]) => void. +A custom function option takes new/old column count, and array of new/old positions. +Note: new list may be partially already filled if we have a partial cache of the layout at that size (items were added later). If complete cache is present this won't get called at all. ### destroy([removeDOM]) diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 41b3afe08..51749dedd 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -7,7 +7,7 @@ */ import { Utils, obsolete } from './utils'; -import { GridStackNode, LayoutOptions } from './types'; +import { GridStackNode, ColumnOptions } from './types'; export type onChangeCB = (nodes: GridStackNode[], removeDOM?: boolean) => void; @@ -537,7 +537,7 @@ export class GridStackEngine { * @param layout specify the type of re-layout that will happen (position, size, etc...). * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column */ - public updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[], layout: LayoutOptions = 'moveScale'): GridStackEngine { + public updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[], layout: ColumnOptions = 'moveScale'): GridStackEngine { if (!this.nodes.length || oldColumn === column) { return this } // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data @@ -584,27 +584,33 @@ export class GridStackEngine { // if we found cache re-use those nodes that are still current let newNodes: GridStackNode[] = []; cacheNodes.forEach(cacheNode => { - let j = nodes.findIndex(n => n && n._id === cacheNode._id); + let j = nodes.findIndex(n => n._id === cacheNode._id); if (j !== -1) { // still current, use cache info positions nodes[j].x = cacheNode.x; nodes[j].y = cacheNode.y; nodes[j].width = cacheNode.width; newNodes.push(nodes[j]); - nodes[j] = null; // erase it so we know what's left + nodes.splice(j, 1); } }); // ...and add any extra non-cached ones - let ratio = column / oldColumn; - let move = layout === 'move' || layout === 'moveScale'; - let scale = layout === 'scale' || layout === 'moveScale'; - nodes.forEach(node => { - if (!node) return this; - node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1))); - node.width = ((column === 1 || oldColumn === 1) ? 1 : - scale ? (Math.round(node.width * ratio) || 1) : (Math.min(node.width, column))); - newNodes.push(node); - }); + if (nodes.length) { + if (typeof layout === 'function') { + layout(column, oldColumn, newNodes, nodes); + } else { + let ratio = column / oldColumn; + let move = (layout === 'move' || layout === 'moveScale'); + let scale = (layout === 'scale' || layout === 'moveScale'); + nodes.forEach(node => { + node.x = (column === 1 ? 0 : (move ? Math.round(node.x * ratio) : Math.min(node.x, column - 1))); + node.width = ((column === 1 || oldColumn === 1) ? 1 : + scale ? (Math.round(node.width * ratio) || 1) : (Math.min(node.width, column))); + newNodes.push(node); + }); + nodes = []; + } + } // finally re-layout them in reverse order (to get correct placement) newNodes = Utils.sort(newNodes, -1, column); diff --git a/src/gridstack.ts b/src/gridstack.ts index c655b2fed..2f65e99d5 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,7 +8,7 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils'; -import { GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, LayoutOptions } from './types'; +import { GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, ColumnOptions } from './types'; import { GridStackDD } from './gridstack-dd'; // export all dependent file as well to make it easier for users to just import the main file @@ -516,7 +516,7 @@ export class GridStack { * @param layout specify the type of re-layout that will happen (position, size, etc...). * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column */ - public column(column: number, layout: LayoutOptions = 'moveScale'): GridStack { + public column(column: number, layout: ColumnOptions = 'moveScale'): GridStack { if (this.opts.column === column) { return this; } let oldColumn = this.opts.column; diff --git a/src/types.ts b/src/types.ts index 5a2b32f5a..f24bb1f92 100644 --- a/src/types.ts +++ b/src/types.ts @@ -10,8 +10,12 @@ import { GridStack } from './gridstack'; import { GridStackDD } from './gridstack-dd'; -/** different layout options when changing # of columns and other re-layouts */ -export type LayoutOptions = 'moveScale' | 'move' | 'scale' | 'none'; +/** different layout options when changing # of columns, + * including a custom function that takes new/old column count, and array of new/old positions + * Note: new list may be partially already filled if we have a cache of the layout at that size and new items were added later. + */ +export type ColumnOptions = 'moveScale' | 'move' | 'scale' | 'none' | + ((column: number, oldColumn: number, nodes: GridStackNode[], oldNodes: GridStackNode[]) => void); export type numberOrString = number | string; export interface GridItemHTMLElement extends HTMLElement { From 93de91327adca052e322c9a316555eb3792d1a61 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 28 Oct 2020 23:31:14 -0700 Subject: [PATCH 0293/1298] HTML5 removal into it's own h5 branch * was a pain to release 2.x while working on HTML5 (3.x) so moved code to 'h5' branch and reverted most changes in develop branch. * will delete v2 branch as well. --- demo/h5dragdrop.html | 128 ------------- demo/index.html | 1 - src/dragdrop/dd-base-impl.ts | 42 ---- src/dragdrop/dd-draggable.ts | 286 ---------------------------- src/dragdrop/dd-droppable.ts | 150 --------------- src/dragdrop/dd-element.ts | 93 --------- src/dragdrop/dd-manager.ts | 11 -- src/dragdrop/dd-resizable-handle.ts | 110 ----------- src/dragdrop/dd-resizable.ts | 280 --------------------------- src/dragdrop/dd-utils.ts | 87 --------- src/dragdrop/gridstack-dd-native.ts | 138 -------------- src/gridstack.ts | 4 + src/index-html5.ts | 13 -- src/index-jq.ts | 13 -- src/index-static.ts | 11 -- webpack.config.js | 7 +- 16 files changed, 8 insertions(+), 1366 deletions(-) delete mode 100644 demo/h5dragdrop.html delete mode 100644 src/dragdrop/dd-base-impl.ts delete mode 100644 src/dragdrop/dd-draggable.ts delete mode 100644 src/dragdrop/dd-droppable.ts delete mode 100644 src/dragdrop/dd-element.ts delete mode 100644 src/dragdrop/dd-manager.ts delete mode 100644 src/dragdrop/dd-resizable-handle.ts delete mode 100644 src/dragdrop/dd-resizable.ts delete mode 100644 src/dragdrop/dd-utils.ts delete mode 100644 src/dragdrop/gridstack-dd-native.ts delete mode 100644 src/index-html5.ts delete mode 100644 src/index-jq.ts delete mode 100644 src/index-static.ts diff --git a/demo/h5dragdrop.html b/demo/h5dragdrop.html deleted file mode 100644 index 9de4b78e7..000000000 --- a/demo/h5dragdrop.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - HTML5 grid demo - - - - - - - - - - - - - -

    Advanced HTML5 Demo

    -
    -
    -
    -
    - -
    -
    - Drop here to remove! -
    -
    -
    -
    -
    - -
    -
    - Drag me in the dashboard! -
    -
    -
    -
    -
    -
    -
    -
    1
    -
    -
    -
    I can't be moved or dragged! -
    - -
    -
    -
    -
    -

    - Drag me! -

    - -

    - ...but don't resize me! -

    -
    -
    -
    4
    -
    -
    -
    5
    -
    -
    -
    6
    -
    -
    -
    7
    -
    -
    -
    8
    -
    -
    -
    9
    -
    -
    -
    10
    -
    -
    -
    11
    -
    -
    -
    -
    - - - - - \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 60e0ab898..49b9a5dac 100644 --- a/demo/index.html +++ b/demo/index.html @@ -8,7 +8,6 @@

    Demos

    • Advance
    • -
    • Advance: use h5ddPlugin
    • AniJS
    • Column
    • Float grid
    • diff --git a/src/dragdrop/dd-base-impl.ts b/src/dragdrop/dd-base-impl.ts deleted file mode 100644 index aa751d18c..000000000 --- a/src/dragdrop/dd-base-impl.ts +++ /dev/null @@ -1,42 +0,0 @@ -// dd-base-impl.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -export type EventCallback = (event: Event) => boolean|void; -export abstract class DDBaseImplement { - disabled = false; - private eventRegister: { - [eventName: string]: EventCallback; - } = {}; - on(event: string, callback: EventCallback): void { - this.eventRegister[event] = callback; - } - off(event: string) { - delete this.eventRegister[event]; - } - enable(): void { - this.disabled = false; - } - disable(): void { - this.disabled = true; - } - destroy() { - this.eventRegister = undefined; - } - triggerEvent(eventName: string, event: Event): boolean|void { - if (this.disabled) { return; } - if (!this.eventRegister) {return; } // used when destory before triggerEvent fire - if (this.eventRegister[eventName]) { - return this.eventRegister[eventName](event); - } - } -} - -export interface HTMLElementExtendOpt { - el: HTMLElement; - option: T; - updateOption(T): void; -} diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts deleted file mode 100644 index 8ac438699..000000000 --- a/src/dragdrop/dd-draggable.ts +++ /dev/null @@ -1,286 +0,0 @@ -// dd-draggable.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDManager } from './dd-manager'; -import { DDUtils } from './dd-utils'; -import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; - -export interface DDDraggbleOpt { - appendTo?: string | HTMLElement; - containment?: string | HTMLElement; - handle?: string; - revert?: string | boolean | unknown; // TODO: not impleament yet - scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually - helper?: string | ((event: Event) => HTMLElement); - start?: (event?, ui?) => void; - stop?: (event?, ui?) => void; - drag?: (event?, ui?) => void; -}; -export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt { - static originStyleProp = ['transition','pointerEvents', 'position', - 'left', 'top', 'opacity', 'zIndex', 'width', 'height']; - el: HTMLElement; - helper: HTMLElement; - option: DDDraggbleOpt; - dragOffset; - dragElementOriginStyle; - dragFollowTimer; - mouseDownElement: HTMLElement; - dragging = false; - - constructor(el: HTMLElement, option: DDDraggbleOpt) { - super(); - this.el = el; - this.option = option || {}; - this.init(); - } - - on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void { - super.on(event, callback); - } - - off(event: 'drag' | 'dragstart' | 'dragstop') { - super.off(event); - } - - enable() { - super.enable(); - this.el.draggable = true; - this.el.classList.remove('ui-draggable-disabled'); - } - - disable() { - super.disable(); - this.el.draggable = false; - this.el.classList.add('ui-draggable-disabled'); - } - - updateOption(opts) { - Object.keys(opts).forEach(key => { - const value = opts[key]; - this.option[key] = value; - }); - } - - protected init() { - this.el.draggable = true; - this.el.classList.add('ui-draggable'); - this.el.addEventListener('mousedown', this.mouseDown); - this.el.addEventListener('dragstart', this.dragStart); - this.el.addEventListener('dragend', this.dragEnd); - this.dragThrottle = DDUtils.throttle(this.drag, 100); - } - - protected mouseDown = (event: MouseEvent) => { - this.mouseDownElement = event.target as HTMLElement; - } - - protected dragStart = (event: DragEvent) => { - if (this.option.handle && !( - this.mouseDownElement - && this.mouseDownElement.matches( - `${this.option.handle}, ${this.option.handle} > *` - ) - )) { - event.preventDefault(); - return; - } - DDManager.dragElement = this; - this.helper = this.createHelper(event); - this.dragOffset = this.getDragOffset(event, this.el, this.helper.parentElement); - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstart' }); - if (this.helper !== this.el) { - this.setupDragFollowNodeNNotifyStart(ev); - } else { - this.dragFollowTimer = setTimeout(() => { - this.dragFollowTimer = undefined; - this.setupDragFollowNodeNNotifyStart(ev); - }, 0); - } - this.cancelDragGhost(event); - } - - protected setupDragFollowNodeNNotifyStart(ev) { - this.setupHelperStyle(); - document.addEventListener('dragover', this.dragThrottle, true); - if (this.option.start) { - this.option.start(ev, this.ui()); - } - this.triggerEvent('dragstart', ev); - this.dragging = true; - this.el.classList.add('ui-draggable-dragging'); - } - - protected dragThrottle: (event: DragEvent) => void; - protected drag = (event: DragEvent) => { - this.dragFollow(event); - const ev = DDUtils.initEvent(event, { target: this.el, type: 'drag' }); - if (this.option.drag) { - this.option.drag(ev, this.ui()); - } - this.triggerEvent('drag', ev); - } - - protected dragEnd = (event: DragEvent) => { - if (this.dragFollowTimer) { - clearTimeout(this.dragFollowTimer); - this.dragFollowTimer = undefined; - return; - } else { - document.removeEventListener('dragover', this.dragThrottle, true); - } - this.dragging = false; - this.el.classList.remove('ui-draggable-dragging'); - if (this.helper === this.el) { - this.removeHelperStyle(); - } else { - this.helper.remove(); - } - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstop' }); - if (this.option.stop) { - this.option.stop(ev, this.ui()) - } - this.triggerEvent('dragstop', ev); - DDManager.dragElement = undefined; - this.helper = undefined; - this.mouseDownElement = undefined; - } - - private createHelper(event: DragEvent) { - const helperIsFunction = (typeof this.option.helper) === 'function'; - const helper = (helperIsFunction - ? (this.option.helper as ((event: Event) => HTMLElement)).apply(this.el, [event]) - : (this.option.helper === "clone" ? DDUtils.clone(this.el) : this.el) - ) as HTMLElement; - if (!document.body.contains(helper)) { - DDUtils.appendTo(helper, (this.option.appendTo === "parent" - ? this.el.parentNode - : this.option.appendTo)); - } - if (helper === this.el) { - this.dragElementOriginStyle = DDDraggble.originStyleProp.map(prop => this.el.style[prop]); - } - return helper; - } - - private setupHelperStyle() { - this.helper.style.pointerEvents = 'none'; - this.helper.style.width = this.dragOffset.width + 'px'; - this.helper.style.height = this.dragOffset.height + 'px'; - this.helper.style.transition = 'none'; // show up instancely - this.helper.style.position = 'fixed'; - this.helper.style.zIndex = '1000'; - // won't be neccessary - // this.helper.style.opacity = '0.8'; - setTimeout(()=>{ - this.helper.style.transition = null; // recover animation - }, 100); - } - - private removeHelperStyle() { - DDDraggble.originStyleProp.forEach(prop => { - this.helper.style[prop] = this.dragElementOriginStyle[prop] || null; - }); - this.dragElementOriginStyle = undefined; - } - - private dragFollow = (event: DragEvent) => { - const offset = this.dragOffset; - this.helper.style.left = event.clientX + offset.offsetLeft + 'px'; - this.helper.style.top = event.clientY + offset.offsetTop + 'px'; - } - - private cancelDragGhost(e: DragEvent) { - if (e.dataTransfer != null) { - e.dataTransfer.setData('text', ''); - } - e.dataTransfer.effectAllowed = 'move'; - if ('function' === typeof DataTransfer.prototype.setDragImage) { - e.dataTransfer.setDragImage(new Image(), 0, 0); - } else { - // ie - (e.target as HTMLElement).style.display = 'none'; - setTimeout(() => { - (e.target as HTMLElement).style.display = ''; - }); - e.stopPropagation(); - return; - } - e.stopPropagation(); - } - - private getDragOffset(event: DragEvent, el: HTMLElement, attachedParent: HTMLElement) { - // in case ancestor has transform/perspective css properies that change the viewpoint - const getViewPointFromParent = (parent) => { - if (!parent) { return null; } - const testEl = document.createElement('div'); - DDUtils.addElStyles(testEl, { - opacity: '0', - position: 'fixed', - top: 0 + 'px', - left: 0 + 'px', - width: '1px', - height: '1px', - zIndex: '-999999', - }); - parent.appendChild(testEl); - const testElPosition = testEl.getBoundingClientRect(); - parent.removeChild(testEl); - return { - offsetX: testElPosition.left, - offsetY: testElPosition.top - }; - } - const targetOffset = el.getBoundingClientRect(); - const mousePositionXY = { - x: event.clientX, - y: event.clientY - }; - const transformOffset = getViewPointFromParent(attachedParent); - return { - left: targetOffset.left, - top: targetOffset.top, - offsetLeft: - mousePositionXY.x + targetOffset.left - transformOffset.offsetX, - offsetTop: - mousePositionXY.y + targetOffset.top - transformOffset.offsetY, - width: targetOffset.width, - height: targetOffset.height - }; - } - destroy() { - if (this.dragging) { - // Destroy while draggging should remove dragend listener and manally trigger - // dragend, otherwise dragEnd can't perform dragstop becasue eventResistry is - // destoryed. - this.el.removeEventListener('dragend', this.dragEnd); - this.dragEnd({} as DragEvent); - } - this.el.draggable = false; - this.el.classList.remove('ui-draggable'); - this.el.removeEventListener('dragstart', this.dragStart); - this.el.removeEventListener('dragend', this.dragEnd); - this.el = undefined; - this.helper = undefined; - this.option = undefined; - super.destroy(); - } - - ui = () => { - const containmentEl = this.el.parentElement; - const containmentRect = containmentEl.getBoundingClientRect(); - const offset = this.helper.getBoundingClientRect(); - return { - helper: [this.helper], //The object arr representing the helper that's being dragged. - position: { - top: offset.top - containmentRect.top, - left: offset.left - containmentRect.left - }, //Current CSS position of the helper as { top, left } object - offset: { top: offset.top, left: offset.left }// Current offset position of the helper as { top, left } object. - }; - } -} - - diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts deleted file mode 100644 index 908b179af..000000000 --- a/src/dragdrop/dd-droppable.ts +++ /dev/null @@ -1,150 +0,0 @@ -// dd-droppable.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDDraggble } from './dd-draggable'; -import { DDManager } from './dd-manager'; -import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; -import { DDUtils } from './dd-utils'; - -export interface DDDropableOpt { - accept?: string | ((el: HTMLElement) => boolean); - drop?: (event: DragEvent, ui) => void; - over?: (event: DragEvent, ui) => void; - out?: (event: DragEvent, ui) => void; -}; -export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt { - el: HTMLElement; - option: DDDropableOpt; - private count = 0; - private dragEl: HTMLElement; - constructor(el: HTMLElement, opts: DDDropableOpt) { - super(); - this.el = el; - this.option = opts || {}; - this.init(); - } - on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void { - super.on(event, callback); - } - off(event: 'drop' | 'dropover' | 'dropout') { - super.off(event); - } - enable() { - if (!this.disabled) { return; } - super.enable(); - this.el.classList.remove('ui-droppable-disabled'); - this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('dragover', this.dragOver); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); - } - disable() { - if (this.disabled) { return; } - super.disable(); - this.el.classList.add('ui-droppable-disabled'); - this.el.removeEventListener('dragenter', this.dragEnter); - this.el.removeEventListener('dragover', this.dragOver); - this.el.removeEventListener('drop', this.drop); - this.el.removeEventListener('dragleave', this.dragLeave); - } - updateOption(opts) { - Object.keys(opts).forEach(key => { - const value = opts[key]; - this.option[key] = value; - }); - } - - protected init() { - this.el.classList.add('ui-droppable'); - this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('dragover', this.dragOver); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); - } - - protected dragEnter = (event: DragEvent) => { - if (this.canDrop()) { - if (0 === this.count) { - this.dragEl = DDManager.dragElement.el; - this.dragEl.addEventListener('dragend', this.resetCount); - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); - if (this.option.over) { - this.option.over(ev, this.ui(DDManager.dragElement)) - } - this.triggerEvent('dropover', ev); - event.preventDefault(); - } - } - this.count++; - } - protected dragOver = (event: DragEvent) => { - if (this.canDrop()) { - event.preventDefault(); - event.stopPropagation(); - } - } - protected dragLeave = (event: DragEvent) => { - this.count--; - if (this.canDrop()) { - if (0 === this.count) { - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); - if (this.option.out) { - this.option.out(ev, this.ui(DDManager.dragElement)) - } - this.triggerEvent('dropout', ev); - } - event.preventDefault(); - } - } - protected drop = (event: DragEvent) => { - if (this.canDrop()) { - const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); - if (this.option.drop) { - this.option.drop(ev, this.ui(DDManager.dragElement)) - } - this.triggerEvent('drop', ev); - event.preventDefault(); - this.count = 0; - } - } - private resetCount = () => { - this.count = 0; - this.dragEl.removeEventListener('dragend', this.resetCount); - this.dragEl = undefined; - } - private canDrop() { - let accept; - if (this.option.accept && typeof this.option.accept === 'string') { - accept = (el: HTMLElement) => { - return el.matches(this.option.accept as string) - } - } else { - accept = this.option.accept as ((el: HTMLElement) => boolean); - } - return DDManager.dragElement && (!accept || accept(DDManager.dragElement.el)); - } - - destroy() { - this.el.classList.remove('ui-droppable'); - if (this.disabled) { - this.el.classList.remove('ui-droppable-disabled'); - this.el.removeEventListener('dragenter', this.dragEnter); - this.el.removeEventListener('dragover', this.dragOver); - this.el.removeEventListener('drop', this.drop); - this.el.removeEventListener('dragleave', this.dragLeave); - } - super.destroy(); - } - - ui(ddDraggble: DDDraggble) { - return { - draggable: ddDraggble.el, - ...ddDraggble.ui() - }; - } -} - diff --git a/src/dragdrop/dd-element.ts b/src/dragdrop/dd-element.ts deleted file mode 100644 index 4f54aecff..000000000 --- a/src/dragdrop/dd-element.ts +++ /dev/null @@ -1,93 +0,0 @@ -// dd-elements.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDResizable, DDResizableOpt } from './dd-resizable'; -import { GridItemHTMLElement } from './../types'; -import { DDDraggble, DDDraggbleOpt } from './dd-draggable'; -import { DDDropable, DDDropableOpt } from './dd-droppable'; -export interface DDElementHost extends GridItemHTMLElement { - ddElement?: DDElement; -} -export class DDElement { - static init(el) { - el.ddElement = new DDElement(el); - return el.ddElement; - } - el: DDElementHost; - ddDraggable?: DDDraggble; - ddDroppable?: DDDropable; - ddResizable?: DDResizable; - constructor(el: DDElementHost) { - this.el = el; - } - on(eventName: string, callback: (event: MouseEvent) => void) { - if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { - this.ddDraggable.on(eventName as 'drag' | 'dragstart' | 'dragstop', callback); - return; - } - if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { - this.ddDroppable.on(eventName as 'drop' | 'dropover' | 'dropout', callback); - return; - } - if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { - this.ddResizable.on(eventName as 'resizestart' | 'resize' | 'resizestop', callback); - return; - } - return; - } - off(eventName: string) { - if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { - this.ddDraggable.off(eventName as 'drag' | 'dragstart' | 'dragstop'); - return; - } - if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { - this.ddDroppable.off(eventName as 'drop' | 'dropover' | 'dropout'); - return; - } - if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { - this.ddResizable.off(eventName as 'resizestart' | 'resize' | 'resizestop'); - return; - } - return; - } - setupDraggable(opts: DDDraggbleOpt) { - if (!this.ddDraggable) { - this.ddDraggable = new DDDraggble(this.el, opts); - } else { - this.ddDraggable.updateOption(opts); - } - } - setupResizable(opts: DDResizableOpt) { - if (!this.ddResizable) { - this.ddResizable = new DDResizable(this.el, opts); - } else { - this.ddResizable.updateOption(opts); - } - } - cleanDraggable() { - if (!this.ddDraggable) { return; } - this.ddDraggable.destroy(); - this.ddDraggable = undefined; - } - setupDroppable(opts: DDDropableOpt) { - if (!this.ddDroppable) { - this.ddDroppable = new DDDropable(this.el, opts); - } else { - this.ddDroppable.updateOption(opts); - } - } - cleanDroppable() { - if (!this.ddDroppable) { return; } - this.ddDroppable.destroy(); - this.ddDroppable = undefined; - } - cleanResizable() { - if (!this.cleanResizable) { return; } - this.ddResizable.destroy(); - this.ddResizable = undefined; - } -} diff --git a/src/dragdrop/dd-manager.ts b/src/dragdrop/dd-manager.ts deleted file mode 100644 index 6fb546326..000000000 --- a/src/dragdrop/dd-manager.ts +++ /dev/null @@ -1,11 +0,0 @@ -// dd-manager.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDDraggble } from './dd-draggable'; -export class DDManager { - static dragElement: DDDraggble; -} diff --git a/src/dragdrop/dd-resizable-handle.ts b/src/dragdrop/dd-resizable-handle.ts deleted file mode 100644 index 513978266..000000000 --- a/src/dragdrop/dd-resizable-handle.ts +++ /dev/null @@ -1,110 +0,0 @@ -// dd-resizable-handle.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDUtils } from "./dd-utils"; - -export interface DDResizableHandleOpt { - start?: (event) => void; - move?: (event) => void; - stop?: (event) => void; -} -export class DDResizableHandle { - static prefix = 'ui-resizable-'; - el: HTMLElement; - host: HTMLElement; - option: DDResizableHandleOpt; - dir: string; - private mouseMoving = false; - private started = false; - private mouseDownEvent: MouseEvent; - constructor(host: HTMLElement, direction: string, option: DDResizableHandleOpt) { - this.host = host; - this.dir = direction; - this.option = option; - this.init(); - } - - init() { - const el = document.createElement('div'); - el.classList.add('ui-resizable-handle'); - el.classList.add(`${DDResizableHandle.prefix}${this.dir}`); - el.style.zIndex = '100'; - el.style.userSelect = 'none'; - this.el = el; - this.host.appendChild(this.el); - this.el.addEventListener('mousedown', this.mouseDown); - this.mouseMoveThrottle = DDUtils.throttle(this.mouseMove, 100); - } - - protected mouseDown = (event: MouseEvent) => { - this.mouseDownEvent = event; - setTimeout(() => { - document.addEventListener('mousemove', this.mouseMoveThrottle, true); - document.addEventListener('mouseup', this.mouseUp); - setTimeout(() => { - if (!this.mouseMoving) { - document.removeEventListener('mousemove', this.mouseMoveThrottle, true); - document.removeEventListener('mouseup', this.mouseUp); - this.mouseDownEvent = undefined; - } - }, 300); - }, 100); - } - - protected mouseMoveThrottle: (event: MouseEvent) => void; - protected mouseMove = (event: MouseEvent) => { - if (!this.started && !this.mouseMoving) { - if (this.hasMoved(event, this.mouseDownEvent)) { - this.mouseMoving = true; - this.triggleEvent('start', this.mouseDownEvent); - this.started = true; - } - } - if (this.started) { - this.triggleEvent('move', event); - } - } - - protected mouseUp = (event: MouseEvent) => { - if (this.mouseMoving) { - this.triggleEvent('stop', event); - } - document.removeEventListener('mousemove', this.mouseMoveThrottle, true); - document.removeEventListener('mouseup', this.mouseUp); - this.mouseMoving = false; - this.started = false; - this.mouseDownEvent = undefined; - } - - private hasMoved(event: MouseEvent, oEvent: MouseEvent) { - const { clientX, clientY } = event; - const { clientX: oClientX, clientY: oClientY } = oEvent; - return ( - Math.abs(clientX - oClientX) > 1 - || Math.abs(clientY - oClientY) > 1 - ); - } - - show() { - this.el.style.display = 'block'; - } - - hide() { - this.el.style.display = 'none'; - } - - destory() { - this.host.removeChild(this.el); - } - - triggleEvent(name: string, event: MouseEvent) { - if (this.option[name]) { - this.option[name](event); - } - } - -} diff --git a/src/dragdrop/dd-resizable.ts b/src/dragdrop/dd-resizable.ts deleted file mode 100644 index d07558d16..000000000 --- a/src/dragdrop/dd-resizable.ts +++ /dev/null @@ -1,280 +0,0 @@ -// dd-resizable.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDResizableHandle } from './dd-resizable-handle'; -import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; -import { DDUtils } from './dd-utils'; -export interface DDResizableOpt { - autoHide?: boolean; - handles?: string; - maxHeight?: number; - maxWidth?: number; - minHeight?: number; - minWidth?: number; - basePosision?: 'fixed' | 'absolute'; - start?: (event: MouseEvent, ui) => void; - stop?: (event: MouseEvent, ui) => void; - resize?: (event: MouseEvent, ui) => void; -} -export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt { - static originStyleProp = ['width', 'height', 'position', 'left', 'top', 'opacity', 'zIndex']; - el: HTMLElement; - option: DDResizableOpt; - handlers: DDResizableHandle[]; - helper: HTMLElement; - originalRect; - temporalRect; - private startEvent: MouseEvent; - private elOriginStyle; - private parentOriginStylePosition; - constructor(el: HTMLElement, opts: DDResizableOpt) { - super(); - this.el = el; - this.option = opts || {}; - this.init(); - } - on(event: 'resizestart' | 'resize' | 'resizestop', callback: (event: DragEvent) => void): void { - super.on(event, callback); - } - off(event: 'resizestart' | 'resize' | 'resizestop') { - super.off(event); - } - enable() { - if (!this.disabled) { return; } - super.enable(); - this.el.classList.remove('ui-resizable-disabled'); - } - disable() { - if (this.disabled) { return; } - super.disable(); - this.el.classList.add('ui-resizable-disabled'); - } - updateOption(opts: DDResizableOpt) { - let updateHandles = false; - let updateAutoHide = false; - if (opts.handles !== this.option.handles) { - updateHandles = true; - } - if (opts.autoHide !== this.option.autoHide) { - updateAutoHide = true; - } - Object.keys(opts).forEach(key => { - const value = opts[key]; - this.option[key] = value; - }); - if (updateHandles) { - this.removeHandlers(); - this.setupHandlers(); - } - if (updateAutoHide) { - this.setupAutoHide(); - } - } - - protected init() { - this.el.classList.add('ui-resizable'); - this.setupAutoHide(); - this.setupHandlers(); - } - - protected setupAutoHide() { - if (this.option.autoHide) { - this.el.classList.add('ui-resizable-autohide'); - this.el.addEventListener('mouseenter', this.showHandlers); - this.el.addEventListener('mouseleave', this.hideHandlers); - } else { - this.el.classList.remove('ui-resizable-autohide'); - this.el.removeEventListener('mouseenter', this.showHandlers); - this.el.removeEventListener('mouseleave', this.hideHandlers); - } - } - - protected showHandlers = () => { - this.el.classList.remove('ui-resizable-autohide'); - } - - protected hideHandlers = () => { - this.el.classList.add('ui-resizable-autohide'); - } - - protected setupHandlers() { - let handlerDirection = this.option.handles || 'e,s,se'; - if (handlerDirection === 'all') { - handlerDirection = 'n,e,s,w,se,sw,ne,nw'; - } - this.handlers = handlerDirection.split(',') - .map(dir => dir.trim()) - .map(dir => new DDResizableHandle(this.el, dir, { - start: (event: MouseEvent) => { - this.resizeStart(event); - }, - stop: (event: MouseEvent) => { - this.resizeStop(event); - }, - move: (event: MouseEvent) => { - this.resizing(event, dir); - } - })); - } - - protected resizeStart(event: MouseEvent) { - this.originalRect = this.el.getBoundingClientRect(); - this.startEvent = event; - this.setupHelper(); - this.applyChange(); - const ev = DDUtils.initEvent(event, { type: 'resizestart', target: this.el }); - if (this.option.start) { - this.option.start(ev, this.ui()); - } - this.triggerEvent('resizestart', ev); - } - - protected resizing(event: MouseEvent, dir: string) { - this.temporalRect = this.getChange(event, dir); - this.applyChange(); - const ev = DDUtils.initEvent(event, { type: 'resize', target: this.el }); - if (this.option.resize) { - this.option.resize(ev, this.ui()); - } - this.triggerEvent('resize', ev); - } - - protected resizeStop(event: MouseEvent) { - const ev = DDUtils.initEvent(event, { type: 'resizestop', target: this.el }); - if (this.option.stop) { - this.option.stop(ev, this.ui()); - } - this.triggerEvent('resizestop', ev); - this.cleanHelper(); - this.startEvent = undefined; - this.originalRect = undefined; - this.temporalRect = undefined; - } - - private setupHelper() { - this.elOriginStyle = DDResizable.originStyleProp.map(prop => this.el.style[prop]); - this.parentOriginStylePosition = this.el.parentElement.style.position; - if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) { - this.el.parentElement.style.position = 'relative'; - } - this.el.style.position = this.option.basePosision || 'absolute'; // or 'fixed' - this.el.style.opacity = '0.8'; - this.el.style.zIndex = '1000'; - } - private cleanHelper() { - DDResizable.originStyleProp.forEach(prop => { - this.el.style[prop] = this.elOriginStyle[prop] || null; - }); - this.el.parentElement.style.position = this.parentOriginStylePosition || null; - } - private getChange(event: MouseEvent, dir: string) { - const oEvent = this.startEvent; - const newRect = { - width: this.originalRect.width, - height: this.originalRect.height, - left: this.originalRect.left, - top: this.originalRect.top - }; - const offsetH = event.clientX - oEvent.clientX; - const offsetV = event.clientY - oEvent.clientY; - - if (dir.indexOf('e') > -1) { - newRect.width += event.clientX - oEvent.clientX; - } - if (dir.indexOf('s') > -1) { - newRect.height += event.clientY - oEvent.clientY; - } - if (dir.indexOf('w') > -1) { - newRect.width -= offsetH; - newRect.left += offsetH; - } - if (dir.indexOf('n') > -1) { - newRect.height -= offsetV; - newRect.top += offsetV - } - const reshape = this.getReShapeSize(newRect.width, newRect.height); - if (newRect.width !== reshape.width) { - if (dir.indexOf('w') > -1) { - newRect.left += reshape.width - newRect.width; - } - newRect.width = reshape.width; - } - if (newRect.height !== reshape.height) { - if (dir.indexOf('n') > -1) { - newRect.top += reshape.height - newRect.height; - } - newRect.height = reshape.height; - } - return newRect; - } - - private getReShapeSize(oWidth, oHeight) { - const maxWidth = this.option.maxWidth || oWidth; - const minWidth = this.option.minWidth || oWidth; - const maxHeight = this.option.maxHeight || oHeight; - const minHeight = this.option.minHeight || oHeight; - const width = Math.min(maxWidth, Math.max(minWidth, oWidth)); - const height = Math.min(maxHeight, Math.max(minHeight, oHeight)); - return { width, height }; - } - - private applyChange() { - let containmentRect = { left: 0, top: 0, width: 0, height: 0 }; - if (this.el.style.position === 'absolute') { - const containmentEl = this.el.parentElement; - const { left, top } = containmentEl.getBoundingClientRect(); - containmentRect = { left, top, width: 0, height: 0 }; - } - Object.keys(this.temporalRect || this.originalRect).forEach(key => { - const value = this.temporalRect[key]; - this.el.style[key] = value - containmentRect[key] + 'px'; - }); - } - - protected removeHandlers() { - this.handlers.forEach(handle => handle.destory()); - this.handlers = undefined; - } - - destory() { - this.removeHandlers(); - if (this.option.autoHide) { - this.el.removeEventListener('mouseenter', this.showHandlers); - this.el.removeEventListener('mouseleave', this.hideHandlers); - } - this.el.classList.remove('ui-resizable'); - this.el = undefined; - super.destroy(); - } - - ui = () => { - const containmentEl = this.el.parentElement; - const containmentRect = containmentEl.getBoundingClientRect(); - const rect = this.temporalRect || this.originalRect; - return { - element: [this.el], // The object representing the element to be resized - helper: [], // TODO: not support yet // The object representing the helper that's being resized - originalElement: [this.el],// we dont wrap here, so simplify as this.el //The object representing the original element before it is wrapped - originalPosition: { - left: this.originalRect.left - containmentRect.left, - top: this.originalRect.top - containmentRect.top - }, // The position represented as { left, top } before the resizable is resized - originalSize: { - width: this.originalRect.width, - height: this.originalRect.height - },// The size represented as { width, height } before the resizable is resized - position: { - left: rect.left - containmentRect.left, - top: rect.top - containmentRect.top - }, // The current position represented as { left, top } - size: { - width: rect.width, - height: rect.height - } // The current size represented as { width, height } - }; - } -} diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts deleted file mode 100644 index e9a6e4788..000000000 --- a/src/dragdrop/dd-utils.ts +++ /dev/null @@ -1,87 +0,0 @@ -// dd-utils.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -export class DDUtils { - static clone(el: HTMLElement): HTMLElement { - const node = el.cloneNode(true) as HTMLElement; - node.removeAttribute('id'); - return node; - } - - static appendTo(el: HTMLElement, parent: string | HTMLElement | Node) { - let parentNode: HTMLElement; - if (typeof parent === 'string') { - parentNode = document.querySelector(parent as string); - } else { - parentNode = parent as HTMLElement; - } - if (parentNode) { - parentNode.append(el); - } - } - static setPositionRelative(el) { - if (!(/^(?:r|a|f)/).test(window.getComputedStyle(el).position)) { - el.style.position = "relative"; - } - } - - static throttle(callback: (...args) => void, delay: number) { - let isWaiting = false; - - return (...args) => { - if (!isWaiting) { - callback(...args); - isWaiting = true; - setTimeout(() => isWaiting = false, delay); - } - } - } - static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }) { - if (styles instanceof Object) { - for (const s in styles) { - if (styles.hasOwnProperty(s)) { - if (Array.isArray(styles[s])) { - // support fallback value - (styles[s] as string[]).forEach(val => { - el.style[s] = val; - }); - } else { - el.style[s] = styles[s]; - } - } - } - } - } - static copyProps(dst, src, props) { - for (let i = 0; i < props.length; i++) { - const p = props[i]; - dst[p] = src[p]; - } - } - - static initEvent(e: DragEvent|MouseEvent, info: {type: string; target?: EventTarget}) { - const kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(','); - const ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(','); - const evt = {type: info.type}; - const obj = { - button: 0, - which: 0, - buttons: 1, - bubbles: true, - cancelable: true, - originEvent: e, - target: info.target? info.target : e.target - } - if (e instanceof DragEvent) { - Object.assign(obj, {dataTransfer: e.dataTransfer}); - } - DDUtils.copyProps(evt, e, kbdProps); - DDUtils.copyProps(evt, e, ptProps); - DDUtils.copyProps(evt, obj, Object.keys(obj)); - return evt as unknown as T; - } -} diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/dragdrop/gridstack-dd-native.ts deleted file mode 100644 index b4b9edab1..000000000 --- a/src/dragdrop/gridstack-dd-native.ts +++ /dev/null @@ -1,138 +0,0 @@ -// gridstack-dd-native.ts 2.0.2-dev @preserve - -/** - * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin - * gridstack.js may be freely distributed under the MIT license. -*/ -import { DDManager } from './dd-manager'; -import { DDElement } from './dd-element'; - -import { GridStack, GridStackElement } from '../gridstack'; -import { GridStackDD, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dd'; -import { GridItemHTMLElement, DDDragInOpt } from '../types'; - -/** - * HTML 5 Native DragDrop based drag'n'drop plugin. - */ -export class GridStackDDNative extends GridStackDD { - public constructor(grid: GridStack) { - super(grid); - } - - public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - if (opts === 'disable' || opts === 'enable') { - dEl.ddResizable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddResizable) { - dEl.cleanResizable(); - } - } else if (opts === 'option') { - dEl.setupResizable({ [key]: value }); - } else { - let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : this.grid.opts.resizable.handles; - dEl.setupResizable({ - ...this.grid.opts.resizable, - ...{ handles: handles }, - ...{ - start: opts.start, - stop: opts.stop, - resize: opts.resize - } - }); - } - return this; - } - - public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { - const dEl = this.getGridStackDDElement(el); - if (opts === 'disable' || opts === 'enable') { - dEl.ddDraggable && dEl.ddDraggable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddDraggable) { // error to call destroy if not there - dEl.cleanDraggable(); - } - } else if (opts === 'option') { - dEl.setupDraggable({ [key]: value }); - } else { - dEl.setupDraggable({ - ...this.grid.opts.draggable, - ...{ - containment: (this.grid.opts._isNested && !this.grid.opts.dragOut) - ? this.grid.el.parentElement - : (this.grid.opts.draggable.containment || null), - start: opts.start, - stop: opts.stop, - drag: opts.drag - } - }); - } - return this; - } - - public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - dEl.setupDraggable(opts); - return this; - } - - public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - if (typeof opts.accept === 'function' && !opts._accept) { - opts._accept = opts.accept; - opts.accept = (el) => opts._accept(el); - } - if (opts === 'disable' || opts === 'enable') { - dEl.ddDroppable && dEl.ddDroppable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddDroppable) { // error to call destroy if not there - dEl.cleanDroppable(); - } - } else if (opts === 'option') { - dEl.setupDroppable({ [key]: value }); - } else { - dEl.setupDroppable(opts); - } - return this; - } - - public isDroppable(el: GridItemHTMLElement): boolean { - const dEl = this.getGridStackDDElement(el); - return !!(dEl.ddDroppable); - } - - public isDraggable(el: GridStackElement): boolean { - const dEl = this.getGridStackDDElement(el); - return !!(dEl.ddDraggable); - } - - public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - dEl.on(name, (event: Event) => { - callback( - event, - DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement, - DDManager.dragElement ? DDManager.dragElement.helper : null) - }); - return this; - } - - public off(el: GridItemHTMLElement, name: string): GridStackDD { - let dEl = this.getGridStackDDElement(el); - dEl.off(name); - return this; - } - private getGridStackDDElement(el: GridStackElement): DDElement { - let dEl; - if (typeof el === 'string') { - dEl = document.querySelector(el as string); - } else { - dEl = el; - } - return dEl.ddElement ? dEl.ddElement: DDElement.init(dEl); - } -} - -// finally register ourself -GridStackDD.registerPlugin(GridStackDDNative); diff --git a/src/gridstack.ts b/src/gridstack.ts index 2f65e99d5..d29094428 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -17,6 +17,10 @@ export * from './utils'; export * from './gridstack-engine'; export * from './gridstack-dd'; +// TEMPORARY import the jquery-ui drag&drop since we don't have alternative yet and don't expect users to create their own yet +import './jq/gridstack-dd-jqueryui'; +export * from './jq/gridstack-dd-jqueryui'; + export type GridStackElement = string | HTMLElement | GridItemHTMLElement; export interface GridHTMLElement extends HTMLElement { diff --git a/src/index-html5.ts b/src/index-html5.ts deleted file mode 100644 index 0ae4ce62f..000000000 --- a/src/index-html5.ts +++ /dev/null @@ -1,13 +0,0 @@ -// index.html5.ts 2.0.2-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve - -// import './gridstack-poly.js'; - -export * from './types'; -export * from './utils'; -export * from './gridstack-engine'; -export * from './gridstack-dd'; -export * from './gridstack'; - -export * from './dragdrop/gridstack-dd-native'; - -// declare module 'gridstack'; for umd ? diff --git a/src/index-jq.ts b/src/index-jq.ts deleted file mode 100644 index 4e7ac2d8d..000000000 --- a/src/index-jq.ts +++ /dev/null @@ -1,13 +0,0 @@ -// index.jq.ts 2.0.2-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve - -// import './gridstack-poly.js'; - -export * from './types'; -export * from './utils'; -export * from './gridstack-engine'; -export * from './gridstack-dd'; -export * from './gridstack'; - -export * from './jq/gridstack-dd-jqueryui'; - -// declare module 'gridstack'; for umd ? diff --git a/src/index-static.ts b/src/index-static.ts deleted file mode 100644 index 27389bf98..000000000 --- a/src/index-static.ts +++ /dev/null @@ -1,11 +0,0 @@ -// index.static.ts 2.0.2-dev - everything you need for a static Grid (non draggable) @preserve - -// import './gridstack-poly.js'; - -export * from './types'; -export * from './utils'; -export * from './gridstack-engine'; -export * from './gridstack-dd'; -export * from './gridstack'; - -// declare module 'gridstack'; for umd ? diff --git a/webpack.config.js b/webpack.config.js index bf33e6f87..2933dc88f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,9 +2,10 @@ const path = require('path'); module.exports = { entry: { - 'gridstack.all': './src/index-jq.ts', - 'gridstack.html5': './src/index-html5.ts', - 'gridstack.static': './src/index-static.ts' + 'gridstack.all': './src/gridstack.ts', + //'gridstack.all': './src/index-jq.ts', + //'gridstack.html5': './src/index-html5.ts', + //'gridstack.static': './src/index-static.ts' }, mode: 'production', // production vs development devtool: 'source-map', From 12a06c6cb4742d0193523efe59398089839b22c4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 28 Oct 2020 23:42:50 -0700 Subject: [PATCH 0294/1298] v2.1.0 release --- README.md | 6 +++--- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 9 files changed, 17 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e435ad021..681fc61fb 100644 --- a/README.md +++ b/README.md @@ -96,8 +96,8 @@ alternatively in html or using CDN (minimized): ```html - - + + ``` .map files are included for debugging purposes. @@ -194,7 +194,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
      ...
      ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 7bccfef70..ce5847f29 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [2.0.2-dev](#202-dev) +- [2.1.0-dev](#210-dev) +- [2.1.0 (2020-10-28)](#210-2020-10-28) - [2.0.2 (2020-10-05)](#202-2020-10-05) - [2.0.1 (2020-09-26)](#201-2020-09-26) - [2.0.0 (2020-09-07)](#200-2020-09-07) @@ -39,7 +40,11 @@ Change log -## 2.0.2-dev +## 2.1.0-dev + +- TBD + +## 2.1.0 (2020-10-28) - fix grid `static: true` to no longer add any drag&drop (even disabled) which should speed things up, and `setStatic(T/F)` will now correctly add it back/delete for items that need it only. Also fixed JQ draggable warning if not initialized first [858](https://github.com/gridstack/gridstack.js/issues/858) diff --git a/package.json b/package.json index b8d09ca1a..7a6fe74ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "2.0.2-dev", + "version": "2.1.0-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index bdfeef6d4..37a7699a5 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-dd.ts 2.0.2-dev @preserve +// gridstack-dd.ts 2.1.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 51749dedd..e390a651c 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 2.0.2-dev @preserve +// gridstack-engine.ts 2.1.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack.ts b/src/gridstack.ts index d29094428..80f63fce5 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 2.0.2-dev @preserve +// gridstack.ts 2.1.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 7f8b98058..f08b70fab 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 2.0.2-dev @preserve +// gridstack-dd-jqueryui.ts 2.1.0-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index f24bb1f92..c004d6065 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 2.0.2-dev @preserve +// types.ts 2.1.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index f6b817334..b16d3954f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 2.0.2-dev @preserve +// utils.ts 2.1.0-dev @preserve /** * https://gridstackjs.com/ From f8cc3598f838a8e48a5758cae8700090bccf26b4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 29 Oct 2020 00:36:09 -0700 Subject: [PATCH 0295/1298] fix demo links --- demo/index.html | 4 ++-- demo/static.html | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/demo/index.html b/demo/index.html index 49b9a5dac..9c3c9dce4 100644 --- a/demo/index.html +++ b/demo/index.html @@ -18,8 +18,8 @@

      Demos

    • Serialization
    • Static
    • Two grids
    • -
    • Vue2.js
    • -
    • Vue3.js
    • +
    • Vue2.js
    • +
    • Vue3.js
    diff --git a/demo/static.html b/demo/static.html index 9058c43b3..1db9afc78 100644 --- a/demo/static.html +++ b/demo/static.html @@ -31,10 +31,10 @@

    Static vs can move/drag Demo

    let serializedData = [ {x: 0, y: 0, width: 2, height: 2, id: '0'}, - {x: 3, y: 1, width: 1, height: 2, id: 'no_move', noMove: true, html: 'no move'}, + {x: 3, y: 1, width: 1, height: 2, id: 'no_move', noMove: true, content: 'no move'}, {x: 4, y: 1, width: 1, height: 1, id: '2'}, - {x: 2, y: 3, width: 3, height: 1, id: 'no_resize', noResize: true, html: 'no resize'}, - {x: 1, y: 3, width: 1, height: 1, id: 'locked', locked: true, html: 'locked'} + {x: 2, y: 3, width: 3, height: 1, id: 'no_resize', noResize: true, content: 'no resize'}, + {x: 1, y: 3, width: 1, height: 1, id: 'locked', locked: true, content: 'locked'} ]; grid.load(serializedData, true); From b3afa0cddec921c8ecc9c6f1cb1557af4a14984b Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 29 Oct 2020 11:09:49 -0700 Subject: [PATCH 0296/1298] doc tweaks --- README.md | 4 ++-- src/gridstack.scss | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 681fc61fb..b382bc7f9 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ gridstack.js [![Coverage Status](https://coveralls.io/repos/github/gridstack/gridstack.js/badge.svg?branch=develop)](https://coveralls.io/github/gridstack/gridstack.js?branch=develop) [![downloads](https://img.shields.io/npm/dm/gridstack.svg)](https://www.npmjs.com/package/gridstack) -Mobile-friendly Javascript library (with Typescript bindings) for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Allows you to build draggable, responsive bootstrap v4-friendly layouts. It also has multiple bindings and works great with [React](https://reactjs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others. Includes Typescript defines. +Mobile-friendly modern Typescript library for dashboard layout and creation. Making a drag-and-drop, multi-column responsive dashboard has never been easier. Has multiple bindings and works great with [React](https://reactjs.org/), [Vue](https://vuejs.org/), [Angular](https://angular.io/), [Knockout.js](http://knockoutjs.com), [Ember](https://www.emberjs.com/) and others (see [frameworks](#gridstackjs-for-specific-frameworks) section). Inspired by no-longer maintained gridster, built with love. -Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). +Check http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/). If you find this lib useful, please donate [PayPal](https://www.paypal.me/alaind831) or [Venmo](https://www.venmo.com/adumesny) (adumesny) and help support it! diff --git a/src/gridstack.scss b/src/gridstack.scss index 030266ba5..32f390b06 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * required gridstack 2.0.0 CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others + * gridstack 2.1.0 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. @@ -23,7 +23,6 @@ $animation_speed: .3s !default; &.grid-stack-rtl { direction: ltr; - > .grid-stack-item { direction: rtl; } From 181dbcc8519cba32afe1b3ef8ad973d193ac1959 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 1 Nov 2020 21:29:28 -0800 Subject: [PATCH 0297/1298] latest rev of tools * using the latest rev all all tools/packages (used yarn upgrade -L) * fixed eslint for missing types * now using typescript@4.0.5 and "webpack": "^5.3.2" --- package.json | 33 +- src/gridstack-dd.ts | 4 +- src/gridstack-engine.ts | 3 +- src/gridstack.ts | 10 +- src/utils.ts | 25 +- yarn.lock | 4074 ++++++++++++++++++++------------------- 6 files changed, 2148 insertions(+), 2001 deletions(-) diff --git a/package.json b/package.json index 7a6fe74ab..59db8b03f 100644 --- a/package.json +++ b/package.json @@ -42,42 +42,41 @@ "url": "https://github.com/gridstack/gridstack.js/issues" }, "homepage": "http://gridstack.github.io/gridstack.js/", - "dependencies": { - }, + "dependencies": {}, "devDependencies": { "@types/jasmine": "^3.5.9", "@types/jquery": "^3.5.1", "@types/jqueryui": "^1.12.13", - "@typescript-eslint/eslint-plugin": "^2.23.0", - "@typescript-eslint/parser": "^2.23.0", + "@typescript-eslint/eslint-plugin": "^4.6.0", + "@typescript-eslint/parser": "^4.6.0", "connect": "^3.7.0", "core-js": "^3.6.4", "coveralls": "^3.0.9", "doctoc": "^1.4.0", - "eslint": "^6.8.0", + "eslint": "^7.12.1", "grunt": "^1.0.4", "grunt-cli": "^1.3.2", - "grunt-contrib-connect": "^2.1.0", + "grunt-contrib-connect": "^3.0.0", "grunt-contrib-copy": "^1.0.0", "grunt-contrib-cssmin": "^3.0.0", - "grunt-contrib-uglify": "^4.0.1", + "grunt-contrib-uglify": "^5.0.0", "grunt-contrib-watch": "^1.1.0", - "grunt-eslint": "^22.0.0", + "grunt-eslint": "^23.0.0", "grunt-protractor-runner": "^5.0.0", "grunt-protractor-webdriver": "^0.2.5", "grunt-sass": "3.1.0", "jasmine-core": "^3.5.0", - "karma": "^4.4.1", + "karma": "^5.2.3", "karma-chrome-launcher": "^3.1.0", "karma-cli": "^2.0.0", - "karma-jasmine": "^3.1.1", - "karma-typescript": "4.1.1", - "node-sass": "^4.13.1", - "puppeteer": "^2.1.1", + "karma-jasmine": "^4.0.1", + "karma-typescript": "5.2.0", + "node-sass": "^5.0.0", + "puppeteer": "^5.4.1", "serve-static": "^1.14.1", - "ts-loader": "^6.2.1", - "typescript": "3.4.5", - "webpack": "^4.44.1", - "webpack-cli": "^3.3.12" + "ts-loader": "^8.0.7", + "typescript": "4.0.5", + "webpack": "^5.3.2", + "webpack-cli": "^4.1.0" } } diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 37a7699a5..e1bfe9af0 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -18,7 +18,7 @@ export type DDDropOpt = { /** drag&drop options currently called from the main code, but others can be passed in grid options */ // eslint-disable-next-line @typescript-eslint/no-explicit-any -export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | {} | any; +export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | any; export type DDKey = 'minWidth' | 'minHeight' | string; export type DDValue = number | string; @@ -33,7 +33,7 @@ export class GridStackDD { static registeredPlugins: typeof GridStackDD; /** call this method to register your plugin instead of the default no-op one */ - static registerPlugin(pluginClass: typeof GridStackDD) { + static registerPlugin(pluginClass: typeof GridStackDD): void { GridStackDD.registeredPlugins = pluginClass; } diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index e390a651c..7ea86b764 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -639,10 +639,11 @@ export class GridStackEngine { } /** called to remove all internal values */ - public cleanupNode(node: GridStackNode) { + public cleanupNode(node: GridStackNode): GridStackEngine { for (let prop in node) { if (prop[0] === '_') delete node[prop]; } + return this; } /** @internal legacy method renames */ diff --git a/src/gridstack.ts b/src/gridstack.ts index 80f63fce5..cc8bc2d13 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -310,8 +310,7 @@ export class GridStack { this._setupRemoveDrop(); this._setupAcceptWidget(); this._updateWindowResizeEvent(); - }; - + } /** * add a new widget and returns it. @@ -401,7 +400,7 @@ export class GridStack { * @example * see http://gridstackjs.com/demo/serialization.html **/ - public load(layout: GridStackWidget[], addAndRemove: boolean | ((w: GridStackWidget, add: boolean) => void) = true) { + public load(layout: GridStackWidget[], addAndRemove: boolean | ((w: GridStackWidget, add: boolean) => void) = true): GridStack { let items = GridStack.Utils.sort(layout); let removed: GridStackNode[] = []; this.batchUpdate(); @@ -435,6 +434,7 @@ export class GridStack { }); this.engine.removedNodes = removed; this.commit(); + return this; } /** @@ -502,7 +502,7 @@ export class GridStack { this._triggerAddEvent(); this._triggerChangeEvent(); return this; - }; + } /** re-layout grid items to reclaim any empty space */ public compact(): GridStack { @@ -1215,7 +1215,7 @@ export class GridStack { private _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { let node = el.gridstackNode; if (!node || node._removeTimeout || !this.opts.removable) return this; - node._removeTimeout = setTimeout(() => { + node._removeTimeout = window.setTimeout(() => { el.classList.add('grid-stack-item-removing'); node._isAboutToRemove = true; }, this.opts.removeTimeout); diff --git a/src/utils.ts b/src/utils.ts index b16d3954f..1e9a2dc89 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -14,7 +14,8 @@ export interface HeightData { } /** checks for obsolete method names */ -export function obsolete(self, f, oldName: string, newName: string, rev: string) { +// eslint-disable-next-line +export function obsolete(self, f, oldName: string, newName: string, rev: string): (...args: any[]) => any { let wrapper = (...args) => { console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' + 'with `' + newName + '`. It will be **completely** removed in v1.0'); @@ -25,7 +26,7 @@ export function obsolete(self, f, oldName: string, newName: string, rev: string) } /** checks for obsolete grid options (can be used for any fields, but msg is about options) */ -export function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: string, rev: string) { +export function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: string, rev: string): void { if (opts[oldName] !== undefined) { opts[newName] = opts[oldName]; console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' + @@ -34,14 +35,14 @@ export function obsoleteOpts(opts: GridStackOptions, oldName: string, newName: s } /** checks for obsolete grid options which are gone */ -export function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: string, info: string) { +export function obsoleteOptsDel(opts: GridStackOptions, oldName: string, rev: string, info: string): void { if (opts[oldName] !== undefined) { console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info); } } /** checks for obsolete Jquery element attributes */ -export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string) { +export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string): void { let oldAttr = el.getAttribute(oldName); if (oldAttr !== null) { el.setAttribute(newName, oldAttr); @@ -106,14 +107,14 @@ export class Utils { } /** removed the given stylesheet id */ - static removeStylesheet(id: string) { + static removeStylesheet(id: string): void { let el = document.querySelector('STYLE[data-gs-style-id=' + id + ']'); if (!el || !el.parentNode) return; el.parentNode.removeChild(el); } /** inserts a CSS rule */ - static addCSSRule(sheet: CSSStyleSheet, selector: string, rules: string) { + static addCSSRule(sheet: CSSStyleSheet, selector: string, rules: string): void { if (typeof sheet.addRule === 'function') { sheet.addRule(selector, rules); } else if (typeof sheet.insertRule === 'function') { @@ -122,7 +123,7 @@ export class Utils { } // eslint-disable-next-line @typescript-eslint/no-explicit-any - static toBool(v: any): boolean { + static toBool(v: unknown): boolean { if (typeof v === 'boolean') { return v; } @@ -154,6 +155,7 @@ export class Utils { } /** copies unset fields in target to use the given default sources values */ + // eslint-disable-next-line static defaults(target, ...sources): {} { sources.forEach(source => { @@ -172,8 +174,9 @@ export class Utils { } /** makes a shallow copy of the passed json struct */ + // eslint-disable-next-line static clone(target: {}): {} { - return {...target}; // was $.extend({}, target) + return {...target}; } /** return the closest parent matching the given class */ @@ -185,7 +188,7 @@ export class Utils { } /** @internal */ - static throttle(callback: () => void, delay: number) { + static throttle(callback: () => void, delay: number): () => void { let isWaiting = false; return (...args) => { @@ -197,7 +200,7 @@ export class Utils { } } - static removePositioningStyles(el: HTMLElement) { + static removePositioningStyles(el: HTMLElement): void { let style = el.style; if (style.position) { style.removeProperty('position'); @@ -230,7 +233,7 @@ export class Utils { } /** @internal */ - static updateScrollPosition(el: HTMLElement, position: {top: number}, distance: number) { + static updateScrollPosition(el: HTMLElement, position: {top: number}, distance: number): void { // is widget in view? let rect = el.getBoundingClientRect(); let innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight); diff --git a/yarn.lock b/yarn.lock index 9c8beb69d..8192f1c80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,26 +2,227 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/core@^7.7.5": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468" + integrity sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg== + dependencies: + "@babel/types" "^7.12.1" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-imports@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz#1644c01591a15a2f084dd6d092d9430eb1d1216c" + integrity sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz#f15c9cc897439281891e11d5ce12562ac0cf3fa9" + integrity sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helpers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.1.tgz#8a8261c1d438ec18cb890434df4ec768734c1e79" + integrity sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.12.1", "@babel/parser@^7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd" + integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw== + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" + integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.1" + "@babel/types" "^7.12.1" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae" + integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA== dependencies: - "@babel/highlight" "^7.8.3" + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" -"@babel/highlight@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797" - integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg== +"@eslint/eslintrc@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.1.tgz#f72069c330461a06684d119384435e12a5d76e3c" + integrity sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" "@textlint/ast-node-types@^4.0.3": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.2.5.tgz#ae13981bc8711c98313a6ac1c361194d6bf2d39b" - integrity sha512-+rEx4jLOeZpUcdvll7jEg/7hNbwYvHWFy4IGW/tk2JdbyB3SJVyIP6arAwzTH/sp/pO9jftfyZnRj4//sLbLvQ== + version "4.3.4" + resolved "https://registry.yarnpkg.com/@textlint/ast-node-types/-/ast-node-types-4.3.4.tgz#f6596c45c32c85dc06915c3077bb7686033efd32" + integrity sha512-Grq+vJuNH7HCa278eFeiqJvowrD+onMCoG2ctLyoN+fXYIQGIr1/8fo8AcIg+VM16Kga+N6Y1UWNOWPd8j1nFg== "@textlint/markdown-to-ast@~6.0.9": version "6.0.9" @@ -36,27 +237,36 @@ traverse "^0.6.6" unified "^6.1.6" -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/jasmine@^3.5.9": - version "3.5.9" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.9.tgz#43ca4566f0d9de23df1211ecf32a9b9f8c3a5923" - integrity sha512-KNL2Fq6GRmty2j6+ZmueT/Z/dkctLNH+5DFoGHNDtcgt7yME9NZd8x2p81Yuea1Xux/qAryDd3zVLUoKpDz1TA== +"@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" -"@types/jquery@*": - version "3.3.33" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9" - integrity sha512-U6IdXYGkfUI42SR79vB2Spj+h1Ly3J3UZjpd8mi943lh126TK7CB+HZOxGh2nM3IySor7wqVQdemD/xtydsBKA== +"@types/eslint@*": + version "7.2.4" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.4.tgz#d12eeed7741d2491b69808576ac2d20c14f74c41" + integrity sha512-YCY4kzHMsHoyKspQH+nwSe+70Kep7Vjt2X+dZe5Vs2vkRudqtoFoUIv1RlJmZB8Hbp7McneupoZij4PadxsK5Q== dependencies: - "@types/sizzle" "*" + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.45": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== -"@types/jquery@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.1.tgz#cebb057acf5071c40e439f30e840c57a30d406c3" - integrity sha512-Tyctjh56U7eX2b9udu3wG853ASYP0uagChJcQJXLUXEU6C/JiW5qt5dl8ao01VRj1i5pgXPAf8f1mq4+FDLRQg== +"@types/jasmine@^3.5.9": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.6.0.tgz#8064fdb6fe9cb92fe79d9d5e9eaff8d2d9a1251a" + integrity sha512-CPT4r0a63e5wpNj5ejMnconM7a+0Hdx6/APsyw8AQOHk0/Mxp3xYrym1ZabWJiYuQkgKB3MonYoN04mxtvAvRA== + +"@types/jquery@*", "@types/jquery@^3.5.1": + version "3.5.4" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.4.tgz#e923f7d05ca790530f17f80a3b89bc28853fa17f" + integrity sha512-//9CHhaUt/rurMJTxGI+I6DmsNHgYU6d8aSLFfO5dB7+10lwLnaWT0z5GY/yY82Q/M+B+0Qh3TixlJ8vmBeqIw== dependencies: "@types/sizzle" "*" @@ -67,15 +277,15 @@ dependencies: "@types/jquery" "*" -"@types/json-schema@^7.0.3": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== -"@types/mime-types@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" - integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM= +"@types/node@*": + version "14.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" + integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== "@types/q@^0.0.32": version "0.0.32" @@ -92,49 +302,83 @@ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== -"@typescript-eslint/eslint-plugin@^2.23.0": - version "2.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.23.0.tgz#aa7133bfb7b685379d9eafe4ae9e08b9037e129d" - integrity sha512-8iA4FvRsz8qTjR0L/nK9RcRUN3QtIHQiOm69FzV7WS3SE+7P7DyGGwh3k4UNR2JBbk+Ej2Io+jLAaqKibNhmtw== +"@types/yauzl@^2.9.1": + version "2.9.1" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.1.tgz#d10f69f9f522eef3cf98e30afb684a1e1ec923af" + integrity sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.6.0.tgz#210cd538bb703f883aff81d3996961f5dba31fdb" + integrity sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg== dependencies: - "@typescript-eslint/experimental-utils" "2.23.0" - eslint-utils "^1.4.3" + "@typescript-eslint/experimental-utils" "4.6.0" + "@typescript-eslint/scope-manager" "4.6.0" + debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" + semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@2.23.0": - version "2.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.23.0.tgz#5d2261c8038ec1698ca4435a8da479c661dc9242" - integrity sha512-OswxY59RcXH3NNPmq+4Kis2CYZPurRU6mG5xPcn24CjFyfdVli5mySwZz/g/xDbJXgDsYqNGq7enV0IziWGXVQ== +"@typescript-eslint/experimental-utils@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.6.0.tgz#f750aef4dd8e5970b5c36084f0a5ca2f0db309a4" + integrity sha512-pnh6Beh2/4xjJVNL+keP49DFHk3orDHHFylSp3WEjtgW3y1U+6l+jNnJrGlbs6qhAz5z96aFmmbUyKhunXKvKw== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.23.0" + "@typescript-eslint/scope-manager" "4.6.0" + "@typescript-eslint/types" "4.6.0" + "@typescript-eslint/typescript-estree" "4.6.0" eslint-scope "^5.0.0" + eslint-utils "^2.0.0" -"@typescript-eslint/parser@^2.23.0": - version "2.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.23.0.tgz#f3d4e2928ff647fe77fc2fcef1a3534fee6a3212" - integrity sha512-k61pn/Nepk43qa1oLMiyqApC6x5eP5ddPz6VUYXCAuXxbmRLqkPYzkFRKl42ltxzB2luvejlVncrEpflgQoSUg== +"@typescript-eslint/parser@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.6.0.tgz#7e9ff7df2f21d5c8f65f17add3b99eeeec33199d" + integrity sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q== dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.23.0" - "@typescript-eslint/typescript-estree" "2.23.0" - eslint-visitor-keys "^1.1.0" + "@typescript-eslint/scope-manager" "4.6.0" + "@typescript-eslint/types" "4.6.0" + "@typescript-eslint/typescript-estree" "4.6.0" + debug "^4.1.1" + +"@typescript-eslint/scope-manager@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.6.0.tgz#b7d8b57fe354047a72dfb31881d9643092838662" + integrity sha512-uZx5KvStXP/lwrMrfQQwDNvh2ppiXzz5TmyTVHb+5TfZ3sUP7U1onlz3pjoWrK9konRyFe1czyxObWTly27Ang== + dependencies: + "@typescript-eslint/types" "4.6.0" + "@typescript-eslint/visitor-keys" "4.6.0" -"@typescript-eslint/typescript-estree@2.23.0": - version "2.23.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.23.0.tgz#d355960fab96bd550855488dcc34b9a4acac8d36" - integrity sha512-pmf7IlmvXdlEXvE/JWNNJpEvwBV59wtJqA8MLAxMKLXNKVRC3HZBXR/SlZLPWTCcwOSg9IM7GeRSV3SIerGVqw== +"@typescript-eslint/types@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.6.0.tgz#157ca925637fd53c193c6bf226a6c02b752dde2f" + integrity sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA== + +"@typescript-eslint/typescript-estree@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.6.0.tgz#85bd98dcc8280511cfc5b2ce7b03a9ffa1732b08" + integrity sha512-s4Z9qubMrAo/tw0CbN0IN4AtfwuehGXVZM0CHNMdfYMGBDhPdwTEpBrecwhP7dRJu6d9tT9ECYNaWDHvlFSngA== dependencies: + "@typescript-eslint/types" "4.6.0" + "@typescript-eslint/visitor-keys" "4.6.0" debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" + globby "^11.0.1" is-glob "^4.0.1" lodash "^4.17.15" - semver "^6.3.0" + semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/visitor-keys@4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.6.0.tgz#fb05d6393891b0a089b243fc8f9fb8039383d5da" + integrity sha512-38Aa9Ztl0XyFPVzmutHXqDMCu15Xx8yKvUo38Gu3GhsuckCh3StPI5t2WIO9LHEsOH7MLmlGfKUisU8eW1Sjhg== + dependencies: + "@typescript-eslint/types" "4.6.0" + eslint-visitor-keys "^2.0.0" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -280,6 +524,18 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@webpack-cli/info@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.0.2.tgz#7ba1a7cfa9efa5b51e76b20ada88ac33b0340ad3" + integrity sha512-FEfLQwmN4pXZSYSrtp+KC84rFanoCIxXFpS2wUvviDCE2fnajwxw2GXzbj83IlH4Dl8Wq8kJjavVwvxv3YJmnw== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.0.1.tgz#28abe7dcb18224ccd4b4e2d37f70e5be66c3d6a9" + integrity sha512-WGMaTMTK6NOe29Hw1WBEok9vGLfKg5C6jWzNOS/6HH1YadR+RL+TRWRcSyc81Dzulljhk/Ree9mrDM4Np9GGOQ== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -295,11 +551,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - accepts@~1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -308,30 +559,30 @@ accepts@~1.3.4: mime-types "~2.1.24" negotiator "0.6.2" -acorn-jsx@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" - integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^6.1.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== +acorn-walk@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.0.0.tgz#56ae4c0f434a45fff4a125e7ea95fa9c98f67a16" + integrity sha512-oZRad/3SMOI/pxbbmqyurIx7jHw1wZDcR9G44L8pUVFEomX/0dH89SrM1KaDXuv1NpzAXz6Op/Xu/Qd5XXzdEA== -acorn@^6.0.5, acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^8.0.1, acorn@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.4.tgz#7a3ae4191466a6984eee0fe3407a4f3aa9db8354" + integrity sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ== adm-zip@^0.4.9: - version "0.4.14" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" - integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== after@0.8.2: version "0.8.2" @@ -350,20 +601,15 @@ agent-base@^4.3.0: dependencies: es6-promisify "^5.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" - integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -382,19 +628,17 @@ anchor-markdown-header@^0.5.5: dependencies: emoji-regex "~6.1.0" -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" - integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== +ansi-escapes@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: - type-fest "^0.8.1" + type-fest "^0.11.0" ansi-regex@^2.0.0: version "2.1.1" @@ -428,18 +672,12 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + color-convert "^2.0.1" anymatch@~3.1.1: version "3.1.1" @@ -449,7 +687,7 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -484,11 +722,21 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-back@^4.0.0, array-back@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" + integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== + array-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8= +array-filter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" + integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -506,6 +754,11 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -526,14 +779,15 @@ arrify@^1.0.0: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.4" @@ -554,14 +808,6 @@ assert@1.4.1: dependencies: util "0.10.3" -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assert@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.0.0.tgz#95fc1c616d48713510680f2eaf2d10dd22e02d32" @@ -582,11 +828,6 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-foreach@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" @@ -597,23 +838,23 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -async@^2.6.0, async@^2.6.1, async@^2.6.2: +async@^2.6.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== dependencies: lodash "^4.17.14" -async@^3.0.1: +async@^3.0.1, async@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== +async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -624,15 +865,22 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.0, available-typed-arrays@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" + integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== + dependencies: + array-filter "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== backo2@1.0.2: version "1.0.2" @@ -649,20 +897,25 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= -base64-js@^1.0.2: +base64-js@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== base@^0.11.1: version "0.11.2" @@ -677,7 +930,7 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -basic-auth@~2.0.0: +basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== @@ -708,35 +961,25 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== +bl@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== dependencies: - file-uri-to-path "1.0.0" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - blocking-proxy@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" @@ -744,17 +987,17 @@ blocking-proxy@^1.0.0: dependencies: minimist "^1.2.0" -bluebird@^3.3.0, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -body-parser@^1.16.1: +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@^1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -793,7 +1036,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -821,12 +1064,12 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== dependencies: - resolve "1.1.7" + resolve "^1.17.0" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -859,7 +1102,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0: +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= @@ -868,17 +1111,19 @@ browserify-rsa@^4.0.0: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" browserify-zlib@^0.2.0: version "0.2.0" @@ -887,30 +1132,27 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserstack@^1.5.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" - integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== +browserslist@^4.14.5: + version "4.14.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.6.tgz#97702a9c212e0c6b6afefad913d3a1538e348457" + integrity sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A== dependencies: - https-proxy-agent "^2.2.1" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + caniuse-lite "^1.0.30001154" + electron-to-chromium "^1.3.585" + escalade "^3.1.1" + node-releases "^1.1.65" -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== +browserstack@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.6.0.tgz#5a56ab90987605d9c138d7a8b88128370297f9bf" + integrity sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw== dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" + https-proxy-agent "^2.2.1" -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= buffer-from@^1.0.0: version "1.1.1" @@ -922,22 +1164,13 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.2.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== +buffer@^5.2.1, buffer@^5.4.3, buffer@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.0.tgz#88afbd29fc89fa7b58e82b39206f31f2cf34feed" + integrity sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg== dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" + base64-js "^1.3.1" + ieee754 "^1.1.13" builtin-status-codes@^3.0.0: version "3.0.0" @@ -954,27 +1187,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -990,6 +1202,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + callsite@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" @@ -1013,16 +1233,16 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-lite@^1.0.30001154: + version "1.0.30001154" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001154.tgz#f3bbc245ce55e4c1cd20fa731b097880181a7f17" + integrity sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1039,7 +1259,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1: +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1048,6 +1268,14 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0, chalk@~4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + character-entities-legacy@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" @@ -1063,49 +1291,10 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.0.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.3.0" - optionalDependencies: - fsevents "~2.1.2" - -chokidar@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== +chokidar@^3.4.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -1113,7 +1302,7 @@ chokidar@^3.4.1: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.5.0" optionalDependencies: fsevents "~2.1.2" @@ -1122,6 +1311,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -1154,25 +1348,13 @@ clean-css@~4.2.1: dependencies: source-map "~0.6.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + string-width "^2.1.1" + strip-ansi "^4.0.0" wrap-ansi "^2.0.0" cliui@^5.0.0: @@ -1184,6 +1366,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -1194,11 +1385,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -coffeescript@~1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" - integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -1219,12 +1405,29 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -colors@^1.1.0: +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -1251,15 +1454,25 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.20.0, commander@~2.20.3: +command-line-usage@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.0.tgz#f28376a3da3361ff3d36cfd31c3c22c9a64c7cb6" + integrity sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw== + dependencies: + array-back "^4.0.0" + chalk "^2.4.2" + table-layout "^1.0.0" + typical "^5.2.0" + +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +commander@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" + integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== component-bind@1.0.0: version "1.0.0" @@ -1271,7 +1484,7 @@ component-emitter@1.2.1: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== @@ -1286,22 +1499,12 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@1.6.2, concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-livereload@^0.6.0: +connect-livereload@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/connect-livereload/-/connect-livereload-0.6.1.tgz#1ac0c8bb9d9cfd5b28b629987a56a9239db9baaa" integrity sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g== -connect@^3.6.0, connect@^3.6.6, connect@^3.7.0: +connect@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== @@ -1311,7 +1514,7 @@ connect@^3.6.0, connect@^3.6.6, connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -console-browserify@^1.1.0: +console-browserify@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== @@ -1336,7 +1539,7 @@ continuable-cache@^0.3.1: resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= -convert-source-map@^1.6.0: +convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -1353,27 +1556,15 @@ cookie@0.3.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" - integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1381,25 +1572,25 @@ core-util-is@1.0.2, core-util-is@~1.0.0: integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= coveralls@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.9.tgz#8cfc5a5525f84884e2948a0bf0f1c0e90aac0420" - integrity sha512-nNBg3B1+4iDox5A5zqHKzUTiwl2ey4k2o0NEcVZYvl+GOSJdKBj4AJGKLv6h3SvWch7tABHePAQOSZWM9E2hMg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== dependencies: js-yaml "^3.13.1" lcov-parse "^1.0.0" log-driver "^1.2.7" - minimist "^1.2.0" - request "^2.88.0" + minimist "^1.2.5" + request "^2.88.2" create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== dependencies: bn.js "^4.1.0" - elliptic "^6.0.0" + elliptic "^6.5.3" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -1410,7 +1601,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: ripemd160 "^2.0.1" sha.js "^2.4.0" -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== @@ -1422,15 +1613,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^6.0.5: +cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -1441,7 +1624,16 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -1470,11 +1662,6 @@ custom-event@~1.0.0: resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1482,18 +1669,20 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-format@^2.0.0: +date-format@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== -dateformat@^1.0.6, dateformat@~1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" + integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== + +dateformat@~3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -1503,13 +1692,13 @@ debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== dependencies: - ms "^2.1.1" + ms "2.1.2" -debug@^3.1.0, debug@^3.2.6: +debug@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -1523,7 +1712,14 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1533,7 +1729,12 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-is@~0.1.3: +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= @@ -1545,7 +1746,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -1602,6 +1803,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -1620,6 +1826,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +devtools-protocol@0.0.809251: + version "0.0.809251" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.809251.tgz#300b3366be107d5c46114ecb85274173e3999518" + integrity sha512-pf+2OY6ghMDPjKkzSWxHMq+McD+9Ojmq5XVRYpv/kPd9sTMQxzEt21592a31API8qRjro0iYYOc3ag46qF/1FA== + di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" @@ -1639,6 +1850,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctoc@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02" @@ -1658,7 +1876,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serialize@^2.2.0: +dom-serialize@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= @@ -1676,10 +1894,10 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -domain-browser@^1.1.1, domain-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +domain-browser@^4.16.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-4.19.0.tgz#1093e17c0a17dbd521182fe90d49ac1370054af1" + integrity sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ== domelementtype@1, domelementtype@^1.3.0: version "1.3.1" @@ -1687,9 +1905,9 @@ domelementtype@1, domelementtype@^1.3.0: integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== domhandler@^2.3.0: version "2.4.2" @@ -1707,11 +1925,11 @@ domutils@^1.5.1: domelementtype "1" duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== -duplexify@^3.4.2, duplexify@^3.5.1, duplexify@^3.6.0: +duplexify@^3.5.1: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== @@ -1734,7 +1952,12 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@^6.0.0: +electron-to-chromium@^1.3.585: + version "1.3.585" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.585.tgz#71cdb722c73488b9475ad1c572cf43a763ef9081" + integrity sha512-xoeqjMQhgHDZM7FiglJAb2aeOxHZWFruUc3MbAGTgE7GB8rr5fTn1Sdh5THGuQtndU3GuXlu91ZKqRivxoCZ/A== + +elliptic@^6.5.3: version "6.5.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== @@ -1772,63 +1995,54 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== +engine.io-client@~3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.4.tgz#77d8003f502b0782dd792b073a4d2cf7ca5ab967" + integrity sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" component-inherit "0.0.3" debug "~3.1.0" - engine.io-parser "~2.1.1" + engine.io-parser "~2.2.0" has-cors "1.1.0" indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~6.1.0" xmlhttprequest-ssl "~1.5.4" yeast "0.1.2" -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== dependencies: after "0.8.2" arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" + base64-arraybuffer "0.1.4" blob "0.0.5" has-binary2 "~1.0.2" -engine.io@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" - integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== +engine.io@~3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c" + integrity sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg== dependencies: accepts "~1.3.4" - base64id "1.0.0" + base64id "2.0.0" cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" enhanced-resolve@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -1837,6 +2051,21 @@ enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.3.1.tgz#3f988d0d7775bdc2d96ede321dc81f8249492f57" + integrity sha512-G1XD3MRGrGfNcf6Hg0LVZG7GIKcYkbfHa5QMxt1HDUTdYoXH0JR1xXyg+MaKLF73E9A27uWNVxvFivNRYeUB6w== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.0.0" + +enquirer@^2.3.4, enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + ent@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" @@ -1848,11 +2077,21 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== -errno@^0.1.3, errno@~0.1.7: +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +envinfo@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" + integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== + +errno@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== @@ -1873,22 +2112,40 @@ error@^7.0.0: dependencies: string-template "~0.2.1" -es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== +es-abstract@^1.17.4, es-abstract@^1.17.5: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -1916,6 +2173,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1926,62 +2188,49 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== +eslint-scope@^5.0.0, eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: - esrecurse "^4.1.0" + esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" -eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^6.0.1, eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint@^7.0.0, eslint@^7.12.1: + version "7.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.12.1.tgz#bd9a81fa67a6cfd51656cdb88812ce49ccec5801" + integrity sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== dependencies: "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.2.1" ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" + chalk "^4.0.0" + cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.0" + esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" @@ -1990,68 +2239,61 @@ eslint@^6.0.1, eslint@^6.8.0: ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^7.0.0" is-glob "^4.0.0" js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" + levn "^0.4.1" + lodash "^4.17.19" minimatch "^3.0.4" - mkdirp "^0.5.1" natural-compare "^1.4.0" - optionator "^0.8.3" + optionator "^0.9.1" progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" table "^5.2.3" text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== +espree@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" - eslint-visitor-keys "^1.1.0" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.1.0.tgz#c5c0b66f383e7656404f86b31334d72524eddb48" - integrity sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q== +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -2077,10 +2319,10 @@ events@1.1.1: resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= -events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== +events@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -2090,7 +2332,35 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exit@^0.1.2, exit@~0.1.1: +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2, exit@~0.1.1, exit@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= @@ -2135,15 +2405,6 @@ extend@^3.0.0, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -2158,15 +2419,16 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@^1.6.6: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= +extract-zip@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" extsprintf@1.3.0: version "1.3.0" @@ -2179,20 +2441,39 @@ extsprintf@^1.2.0: integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + fault@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" @@ -2207,18 +2488,13 @@ faye-websocket@~0.10.0: dependencies: websocket-driver ">=0.5.1" -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= dependencies: pend "~1.2.0" -figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== - figures@^1.0.1: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2227,13 +2503,6 @@ figures@^1.0.1: escape-string-regexp "^1.0.5" object-assign "^4.1.0" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -2246,11 +2515,6 @@ file-sync-cmp@^0.1.0: resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b" integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs= -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -2281,15 +2545,6 @@ finalhandler@1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -2305,6 +2560,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -2315,16 +2578,6 @@ findup-sync@^2.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - findup-sync@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" @@ -2357,18 +2610,10 @@ flat-cache@^2.0.1: rimraf "2.6.3" write "1.0.3" -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" +flatted@^2.0.0, flatted@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== follow-redirects@^1.0.0: version "1.13.0" @@ -2387,6 +2632,11 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2418,60 +2668,36 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - graceful-fs "^4.1.2" + graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.11" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3" - integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" @@ -2504,6 +2730,11 @@ gaze@^1.0.0, gaze@^1.1.0: dependencies: globule "^1.0.0" +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2514,11 +2745,34 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2536,33 +2790,19 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" - integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" -glob@^5.0.15, glob@~5.0.0: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1, glob@~7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -2574,15 +2814,14 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.0" -glob@~7.0.0: - version "7.0.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" - integrity sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo= +glob@~5.0.0: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: - fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "2 || 3" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2595,13 +2834,6 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -2613,22 +2845,30 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^12.1.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" - integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== dependencies: type-fest "^0.8.1" +globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" @@ -2642,20 +2882,20 @@ globby@^5.0.0: pinkie-promise "^2.0.0" globule@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz#90a25338f22b7fbeb527cee63c629aea754d33b9" - integrity sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g== + version "1.3.2" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" + integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== dependencies: glob "~7.1.1" - lodash "~4.17.12" + lodash "~4.17.10" minimatch "~3.0.2" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, graceful-fs@^4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -grunt-cli@^1.3.2: +grunt-cli@^1.3.2, grunt-cli@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.3.2.tgz#60f12d12c1b5aae94ae3469c6b5fe24e960014e8" integrity sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ== @@ -2666,30 +2906,20 @@ grunt-cli@^1.3.2: nopt "~4.0.1" v8flags "~3.1.1" -grunt-cli@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/grunt-cli/-/grunt-cli-1.2.0.tgz#562b119ebb069ddb464ace2845501be97b35b6a8" - integrity sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg= - dependencies: - findup-sync "~0.3.0" - grunt-known-options "~1.1.0" - nopt "~3.0.6" - resolve "~1.1.0" - -grunt-contrib-connect@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-2.1.0.tgz#c689c3d9d2c2bacb6fccc81e5cd65702bf8e2b50" - integrity sha512-yeCHdz5zqoibhQDyw/X+E/wTzYPpim+C2p+xYyXUsXVEkfxnKVIWYOWrAKkFHlz9//nIC0S3JbUDd3mVvJcxVA== +grunt-contrib-connect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-connect/-/grunt-contrib-connect-3.0.0.tgz#720e9ef39f976b804baf994345c2f6ecfdf3b264" + integrity sha512-L1GXk6PqDP/meX0IOX1MByBvOph6h8Pvx4/iBIYD7dpokVCAAQPR/IIV1jkTONEM09xig/Y8/y3R9Fqc8U3HSA== dependencies: - async "^2.6.1" - connect "^3.6.6" - connect-livereload "^0.6.0" - morgan "^1.9.1" + async "^3.2.0" + connect "^3.7.0" + connect-livereload "^0.6.1" + morgan "^1.10.0" node-http2 "^4.0.1" - opn "^5.3.0" + opn "^6.0.0" portscanner "^2.2.0" serve-index "^1.9.1" - serve-static "^1.13.2" + serve-static "^1.14.1" grunt-contrib-copy@^1.0.0: version "1.0.0" @@ -2708,10 +2938,10 @@ grunt-contrib-cssmin@^3.0.0: clean-css "~4.2.1" maxmin "^2.1.0" -grunt-contrib-uglify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz#68a7b62fa045ce8e2c7574d1bdcd3b96b8a686b1" - integrity sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg== +grunt-contrib-uglify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/grunt-contrib-uglify/-/grunt-contrib-uglify-5.0.0.tgz#04dda8a4f44f4e4a147aa26c6259404fd8097a49" + integrity sha512-rIFFPJMWKnh6oxDe2b810Ysg5SKoiI0u/FvuvAVpvJ7VHILkKtGqA4jgJ1JWruWQ+1m5FtB1lVSK81YyzIgDUw== dependencies: chalk "^2.4.1" maxmin "^2.1.0" @@ -2728,48 +2958,48 @@ grunt-contrib-watch@^1.1.0: lodash "^4.17.10" tiny-lr "^1.1.1" -grunt-eslint@^22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/grunt-eslint/-/grunt-eslint-22.0.0.tgz#2ad0f15115f1826cb4e8e4a77d16357f618f6954" - integrity sha512-I7vIU4x/mb20fmA6TAmLx6Wzn7mfs8ZXeuk7LbP2ujKVFV7KZmJ3qXUyqe2wnD+v/74Rs5uYOZrLL8EoBmlG9Q== +grunt-eslint@^23.0.0: + version "23.0.0" + resolved "https://registry.yarnpkg.com/grunt-eslint/-/grunt-eslint-23.0.0.tgz#47c804613c59646b2cfa402eb8d301e55b206bcf" + integrity sha512-QqHSAiGF08EVD7YlD4OSRWuLRaDvpsRdTptwy9WaxUXE+03mCLVA/lEaR6SHWehF7oUwIqCEjaNONeeeWlB4LQ== dependencies: - chalk "^2.1.0" - eslint "^6.0.1" + chalk "^4.0.0" + eslint "^7.0.0" grunt-known-options@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.1.tgz#6cc088107bd0219dc5d3e57d91923f469059804d" integrity sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ== -grunt-legacy-log-utils@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" - integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== +grunt-legacy-log-utils@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz#49a8c7dc74051476dcc116c32faf9db8646856ef" + integrity sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw== dependencies: - chalk "~2.4.1" - lodash "~4.17.10" + chalk "~4.1.0" + lodash "~4.17.19" -grunt-legacy-log@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" - integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== +grunt-legacy-log@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz#1c6eaf92371ea415af31ea84ce50d434ef6d39c4" + integrity sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA== dependencies: colors "~1.1.2" - grunt-legacy-log-utils "~2.0.0" + grunt-legacy-log-utils "~2.1.0" hooker "~0.2.3" - lodash "~4.17.5" + lodash "~4.17.19" -grunt-legacy-util@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" - integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== +grunt-legacy-util@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-2.0.0.tgz#34d20f2a26c6adebfe9a9bdc8823f7016b0369c3" + integrity sha512-ZEmYFB44bblwPE2oz3q3ygfF6hseQja9tx8I3UZIwbUik32FMWewA+d1qSFicMFB+8dNXDkh35HcDCWlpRsGlA== dependencies: async "~1.5.2" exit "~0.1.1" getobject "~0.1.0" hooker "~0.2.3" - lodash "~4.17.10" - underscore.string "~3.3.4" + lodash "~4.17.20" + underscore.string "~3.3.5" which "~1.3.0" grunt-protractor-runner@^5.0.0: @@ -2794,27 +3024,25 @@ grunt-sass@3.1.0: integrity sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A== grunt@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.4.tgz#c799883945a53a3d07622e0737c8f70bfe19eb38" - integrity sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.3.0.tgz#55db6ccd80c6fb53722e496f680620a2e681f809" + integrity sha512-6ILlMXv11/4cxuhSMfSU+SfvbxrPuqZrAtLN64+tZpQ3DAKfSQPQHRbTjSbdtxfyQhGZPtN0bDZJ/LdCM5WXXA== dependencies: - coffeescript "~1.10.0" - dateformat "~1.0.12" + dateformat "~3.0.3" eventemitter2 "~0.4.13" - exit "~0.1.1" + exit "~0.1.2" findup-sync "~0.3.0" - glob "~7.0.0" - grunt-cli "~1.2.0" + glob "~7.1.6" + grunt-cli "~1.3.2" grunt-known-options "~1.1.0" - grunt-legacy-log "~2.0.0" - grunt-legacy-util "~1.1.1" + grunt-legacy-log "~3.0.0" + grunt-legacy-util "~2.0.0" iconv-lite "~0.4.13" - js-yaml "~3.13.0" - minimatch "~3.0.2" - mkdirp "~0.5.1" + js-yaml "~3.14.0" + minimatch "~3.0.4" + mkdirp "~1.0.4" nopt "~3.0.6" - path-is-absolute "~1.0.0" - rimraf "~2.6.2" + rimraf "~3.0.2" gzip-size@^3.0.0: version "3.0.0" @@ -2823,29 +3051,17 @@ gzip-size@^3.0.0: dependencies: duplexer "^0.1.1" -handlebars@^4.0.1: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== dependencies: - ajv "^6.5.5" + ajv "^6.12.3" har-schema "^2.0.0" has-ansi@^2.0.0: @@ -2867,17 +3083,17 @@ has-cors@1.1.0: resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0, has-symbols@^1.0.1: +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -2926,12 +3142,13 @@ has@^1.0.3: function-bind "^1.1.1" hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" @@ -2963,9 +3180,14 @@ hooker@~0.2.3: integrity sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk= hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== htmlparser2@~3.9.2: version "3.9.2" @@ -3011,12 +3233,12 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== -http-proxy@^1.13.0: +http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -3060,59 +3282,59 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -3125,11 +3347,6 @@ indexof@0.0.1: resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3138,7 +3355,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3153,7 +3370,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -3165,39 +3382,20 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" -inquirer@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" - integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== interpret@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== is-absolute@^1.0.0: version "1.0.0" @@ -3244,13 +3442,6 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -3263,10 +3454,17 @@ is-buffer@^1.1.4, is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-core-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d" + integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== + dependencies: + has "^1.0.3" is-data-descriptor@^0.1.4: version "0.1.4" @@ -3380,6 +3578,11 @@ is-nan@^1.2.1: dependencies: define-properties "^1.1.3" +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + is-number-like@^1.0.3: version "1.0.8" resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" @@ -3430,17 +3633,12 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== +is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: - has "^1.0.3" + has-symbols "^1.0.1" is-relative@^1.0.0: version "1.0.0" @@ -3449,6 +3647,16 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -3456,6 +3664,16 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-typed-array@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.3.tgz#a4ff5a5e672e1a55f99c7f54e59597af5c1df04d" + integrity sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ== + dependencies: + available-typed-arrays "^1.0.0" + es-abstract "^1.17.4" + foreach "^2.0.5" + has-symbols "^1.0.1" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3493,7 +3711,7 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3503,12 +3721,10 @@ isarray@2.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= -isbinaryfile@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" +isbinaryfile@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" + integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== isexe@^2.0.0: version "2.0.0" @@ -3527,35 +3743,56 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -istanbul@0.4.5, istanbul@^0.4.0: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -jasmine-core@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== +jasmine-core@^3.5.0, jasmine-core@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" + integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== jasmine-core@~2.8.0: version "2.8.0" @@ -3576,20 +3813,29 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= +jest-worker@^26.6.1: + version "26.6.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.1.tgz#c2ae8cde6802cc14056043f997469ec170d9c32a" + integrity sha512-R5IE3qSGz+QynJx8y+ICEkdI2OJ3RJjRQVEyCcFAd3yVhQSEtquziPO29Mlzgn07LOVE8u8jhJ1FqcwegiXWOw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + js-base64@^2.1.8: - version "2.5.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" - integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.x, js-yaml@^3.13.1, js-yaml@~3.13.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@^3.13.1, js-yaml@~3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -3599,6 +3845,11 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3631,6 +3882,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3649,9 +3907,9 @@ jsprim@^1.2.2: verror "1.10.0" jszip@^3.1.3: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" - integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -3672,51 +3930,43 @@ karma-cli@^2.0.0: dependencies: resolve "^1.3.3" -karma-coverage@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.2.tgz#cc09dceb589a83101aca5fe70c287645ef387689" - integrity sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw== - dependencies: - dateformat "^1.0.6" - istanbul "^0.4.0" - lodash "^4.17.0" - minimatch "^3.0.0" - source-map "^0.5.1" - -karma-jasmine@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.1.1.tgz#f592b253e7619a8d84559d7daf473a647498ade8" - integrity sha512-pxBmv5K7IkBRLsFSTOpgiK/HzicQT3mfFF+oHAC7nxMfYKhaYFgxOa5qjnHW4sL5rUnmdkSajoudOnnOdPyW4Q== +karma-jasmine@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-4.0.1.tgz#b99e073b6d99a5196fc4bffc121b89313b0abd82" + integrity sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw== dependencies: - jasmine-core "^3.5.0" + jasmine-core "^3.6.0" -karma-typescript@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-4.1.1.tgz#2b37164e31f23397cf35774fb436e3a7e7f78a29" - integrity sha512-NiGt3Lh8pxKY6hSW4mBV7X45zfB+EA4ezVMNN/vnzLvN+du0UoEc8lTAhrD/DMrjKP3wDlpabku652svRyguXg== +karma-typescript@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-5.2.0.tgz#3a1fdc322b829b698cdab5768ee71b940f021f15" + integrity sha512-idMJ0SKPLYudNiPaRw+GyOu0RQPJFpyUfrSN6/uFTzPLnJ7sLDd6xPMcxB+pNBHpL6s4fQfC5W9OlNblRvt2Dg== dependencies: - acorn "^6.0.5" - acorn-walk "^6.1.1" + acorn "^8.0.1" + acorn-walk "^8.0.0" assert "^2.0.0" async "^3.0.1" - browser-resolve "^1.11.3" + browser-resolve "^2.0.0" browserify-zlib "^0.2.0" - buffer "^5.2.1" + buffer "^5.4.3" combine-source-map "^0.8.0" - console-browserify "^1.1.0" + console-browserify "^1.2.0" constants-browserify "^1.0.0" - convert-source-map "^1.6.0" + convert-source-map "^1.7.0" crypto-browserify "^3.12.0" diff "^4.0.1" - domain-browser "^1.2.0" - events "^3.0.0" - glob "^7.1.3" + domain-browser "^4.16.0" + events "^3.2.0" + glob "^7.1.6" https-browserify "^1.0.0" - istanbul "0.4.5" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.0" json-stringify-safe "^5.0.1" - karma-coverage "^1.1.1" - lodash "^4.17.11" - log4js "^4.0.1" + lodash "^4.17.19" + log4js "^6.3.0" minimatch "^3.0.4" os-browserify "^0.3.0" pad "^3.2.0" @@ -3725,49 +3975,45 @@ karma-typescript@4.1.1: punycode "^2.1.1" querystring-es3 "^0.2.1" readable-stream "^3.1.1" - remap-istanbul "^0.13.0" source-map "^0.7.3" - stream-browserify "^2.0.2" - stream-http "^3.0.0" - string_decoder "^1.2.0" - timers-browserify "^2.0.10" - tmp "^0.1.0" + stream-browserify "^3.0.0" + stream-http "^3.1.0" + string_decoder "^1.3.0" + timers-browserify "^2.0.11" + tmp "^0.2.1" tty-browserify "^0.0.1" url "^0.11.0" - util "^0.12.0" - vm-browserify "1.1.0" + util "^0.12.1" + vm-browserify "^1.1.2" -karma@^4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.4.1.tgz#6d9aaab037a31136dc074002620ee11e8c2e32ab" - integrity sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A== +karma@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-5.2.3.tgz#3264024219bad2728e92542e0058a2492d7a46e4" + integrity sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ== dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" + body-parser "^1.19.0" braces "^3.0.2" - chokidar "^3.0.0" - colors "^1.1.0" - connect "^3.6.0" + chokidar "^3.4.2" + colors "^1.4.0" + connect "^3.7.0" di "^0.0.1" - dom-serialize "^2.2.0" - flatted "^2.0.0" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.14" - log4js "^4.0.0" - mime "^2.3.1" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.1.1" + dom-serialize "^2.2.1" + glob "^7.1.6" + graceful-fs "^4.2.4" + http-proxy "^1.18.1" + isbinaryfile "^4.0.6" + lodash "^4.17.19" + log4js "^6.2.1" + mime "^2.4.5" + minimatch "^3.0.4" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^2.3.0" source-map "^0.6.1" - tmp "0.0.33" - useragent "2.3.0" + tmp "0.2.1" + ua-parser-js "0.7.22" + yargs "^15.3.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" @@ -3793,25 +4039,25 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: - invert-kv "^1.0.0" + invert-kv "^2.0.0" lcov-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + prelude-ls "^1.2.1" + type-check "~0.4.0" lie@~3.3.0: version "3.3.0" @@ -3850,12 +4096,12 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.1.0.tgz#f70bc0c29edbabdf2043e7ee73ccc3fe1c96b42d" + integrity sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA== -loader-utils@^1.0.2, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -3872,6 +4118,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash.isfinite@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" @@ -3882,7 +4135,7 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10, lodash@~4.17.12, lodash@~4.17.5: +lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@~4.17.10, lodash@~4.17.19, lodash@~4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -3892,16 +4145,16 @@ log-driver@^1.2.7: resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log4js@^4.0.0, log4js@^4.0.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" - integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== +log4js@^6.2.1, log4js@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" + integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== dependencies: - date-format "^2.0.0" + date-format "^3.0.0" debug "^4.1.1" - flatted "^2.0.0" + flatted "^2.0.1" rfdc "^1.1.4" - streamroller "^1.0.6" + streamroller "^2.2.4" loud-rejection@^1.0.0: version "1.6.0" @@ -3911,28 +4164,12 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@4.1.x, lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - pify "^4.0.1" - semver "^5.6.0" + semver "^6.0.0" make-iterator@^1.0.0: version "1.0.1" @@ -3941,6 +4178,13 @@ make-iterator@^1.0.0: dependencies: kind-of "^6.0.2" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3987,13 +4231,14 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" memory-fs@^0.5.0: version "0.5.0" @@ -4003,7 +4248,7 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0, meow@^3.7.0: +meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= @@ -4019,7 +4264,17 @@ meow@^3.3.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.0.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4038,7 +4293,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0: +micromatch@^4.0.0, micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== @@ -4054,29 +4309,29 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0: - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -mime-types@^2.1.12, mime-types@^2.1.25, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: - mime-db "1.43.0" + mime-db "1.44.0" mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.3.1: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.5: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -4091,48 +4346,32 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@~3.0.2, minimatch@~3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.2.tgz#b00a00230a1108c48c169e69a291aafda3aacd63" - integrity sha512-rIqbOrKb8GJmx/5bc2M0QchhUouMXSpd1RTclXsB41JdL+VtnojfaJR+h7F9k18/4kHUsBFgk80Uk+q569vjPA== - -minimist@^1.2.5: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.0: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= +minipass@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" + minipass "^3.0.0" + yallist "^4.0.0" mixin-deep@^1.2.0: version "1.3.2" @@ -4142,42 +4381,33 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@0.5.x, mkdirp@^0.5.3: +mkdirp@^0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -morgan@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" - integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== +mkdirp@^1.0.3, mkdirp@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +morgan@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: - basic-auth "~2.0.0" + basic-auth "~2.0.1" debug "2.6.9" - depd "~1.1.2" + depd "~2.0.0" on-finished "~2.3.0" - on-headers "~1.0.1" - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" + on-headers "~1.0.2" ms@2.0.0: version "2.0.0" @@ -4189,20 +4419,15 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.1.1: +ms@2.1.2, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nan@^2.12.1, nan@^2.13.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nan@^2.13.2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanomatch@^1.2.9: version "1.2.13" @@ -4231,33 +4456,36 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" + integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.3" + nopt "^5.0.0" + npmlog "^4.1.2" + request "^2.88.2" + rimraf "^3.0.2" + semver "^7.3.2" + tar "^6.0.2" + which "^2.0.2" node-http2@^4.0.1: version "4.0.1" @@ -4273,59 +4501,41 @@ node-http2@^4.0.1: url "^0.11.0" websocket-stream "^5.0.1" -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" +node-releases@^1.1.65: + version "1.1.65" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.65.tgz#52d9579176bd60f23eba05c4438583f341944b81" + integrity sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA== -node-sass@^4.13.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" - integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== +node-sass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-5.0.0.tgz#4e8f39fbef3bac8d2dc72ebe3b539711883a78d2" + integrity sha512-opNgmlu83ZCF792U281Ry7tak9IbVC+AKnXGovcQ8LG8wFaJv6cLnRlc6DIHlmNxWEexB5bZxi9SZ9JyUuOYjw== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" - cross-spawn "^3.0.0" + cross-spawn "^7.0.3" gaze "^1.0.0" get-stdin "^4.0.1" glob "^7.0.3" - in-publish "^2.0.0" lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" - node-gyp "^3.8.0" + node-gyp "^7.1.0" npmlog "^4.0.0" request "^2.88.0" - sass-graph "^2.2.4" + sass-graph "2.2.5" stdout-stream "^1.4.0" "true-case-path" "^1.0.2" -"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -4333,9 +4543,9 @@ node-sass@^4.13.1: abbrev "1" nopt@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" osenv "^0.1.4" @@ -4350,19 +4560,26 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.0, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -4382,7 +4599,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -4401,20 +4618,20 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -4426,15 +4643,15 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== +object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" object.defaults@^1.1.0: version "1.1.0" @@ -4468,12 +4685,12 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" -on-headers@~1.0.1: +on-headers@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -4481,38 +4698,30 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: wrappy "1" onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -opn@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +opn@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-6.0.0.tgz#3c5b0db676d5f97da1233d1ed42d182bc5a27d2d" + integrity sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ== dependencies: is-wsl "^1.1.0" -optimist@^0.6.1, optimist@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" os-browserify@^0.3.0: version "0.3.0" @@ -4524,19 +4733,21 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - lcid "^1.0.0" + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -4544,10 +4755,32 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-limit@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== dependencies: p-try "^2.0.0" @@ -4558,6 +4791,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4575,15 +4815,6 @@ pako@~1.0.2, pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4591,14 +4822,13 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== dependencies: - asn1.js "^4.0.0" + asn1.js "^5.2.0" browserify-aes "^1.0.0" - create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" safe-buffer "^5.1.1" @@ -4643,6 +4873,11 @@ parseqs@0.0.5: dependencies: better-assert "~1.0.0" +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + parseuri@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" @@ -4650,6 +4885,11 @@ parseuri@0.0.5: dependencies: better-assert "~1.0.0" +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4660,21 +4900,11 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -4687,7 +4917,12 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@~1.0.0: +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -4697,11 +4932,16 @@ path-is-inside@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.1: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -4728,10 +4968,15 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -4749,12 +4994,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: - version "2.2.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a" - integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA== - -picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -4764,11 +5004,6 @@ pify@^2.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -4781,22 +5016,12 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -plugin-error@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" - integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: - ansi-colors "^1.0.1" - arr-diff "^4.0.0" - arr-union "^3.1.0" - extend-shallow "^3.0.2" + find-up "^4.0.0" portscanner@^2.2.0: version "2.2.0" @@ -4811,10 +5036,10 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== pretty-bytes@^3.0.0: version "3.0.1" @@ -4838,15 +5063,10 @@ progress@^2.0.0, progress@^2.0.1: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - protractor@^5.0.0: - version "5.4.3" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" - integrity sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA== + version "5.4.4" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.4.tgz#b241466aaf83b76bc2c58df67deb9a5cdfc61529" + integrity sha512-BaL4vePgu3Vfa/whvTUAlgaCAId4uNSGxIFSCXMgj7LMYENPWLp85h5RBi9pdpX/bWQ8SF6flP7afmi2TC4eHw== dependencies: "@types/q" "^0.0.32" "@types/selenium-webdriver" "^3.0.0" @@ -4856,33 +5076,28 @@ protractor@^5.0.0: glob "^7.0.3" jasmine "2.8.0" jasminewd2 "^2.1.0" - optimist "~0.6.0" q "1.4.1" saucelabs "^1.5.0" selenium-webdriver "3.6.0" source-map-support "~0.4.0" webdriver-js-extender "2.1.0" webdriver-manager "^12.0.6" + yargs "^12.0.5" proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4= + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.28: - version "1.7.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c" - integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ== + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== public-encrypt@^4.0.0: version "4.0.3" @@ -4896,14 +5111,6 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -4912,45 +5119,33 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-2.1.1.tgz#ccde47c2a688f131883b50f2d697bd25189da27e" - integrity sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg== +puppeteer@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.4.1.tgz#f2038eb23a0f593ed2cce0d6e7cd5c43aecd6756" + integrity sha512-8u6r9tFm3gtMylU4uCry1W/CeAA8uczKMONvGvivkTsGqKA7iB7DWO2CBFYlB9GY6/IEoq9vkI5slJWzUBkwNw== dependencies: - "@types/mime-types" "^2.1.0" debug "^4.1.0" - extract-zip "^1.6.6" + devtools-protocol "0.0.809251" + extract-zip "^2.0.0" https-proxy-agent "^4.0.0" - mime "^2.0.3" - mime-types "^2.1.25" + node-fetch "^2.6.1" + pkg-dir "^4.2.0" progress "^2.0.1" proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" + rimraf "^3.0.2" + tar-fs "^2.0.0" + unbzip2-stream "^1.3.3" + ws "^7.2.3" q@1.4.1: version "1.4.1" @@ -4962,7 +5157,7 @@ q@^1.4.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qjobs@^1.1.4: +qjobs@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== @@ -4973,16 +5168,16 @@ qs@6.7.0: integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== qs@^6.4.0: - version "6.9.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.1.tgz#20082c65cb78223635ab1a9eaca8875a29bf8ec9" - integrity sha512-Cxm7/SS/y/Z3MHWSxXb8lIFqgqBowP5JMlTUFyJN88y0SGQhVmZnqFK/PeuMX9LzUyWsqqhNxIyg0jlzq946yA== + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -querystring-es3@^0.2.0, querystring-es3@^0.2.1: +querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= @@ -4992,7 +5187,7 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -5007,7 +5202,7 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.0, range-parser@~1.2.1: +range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -5047,7 +5242,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.3, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5060,7 +5255,7 @@ read-pkg@^1.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -5069,26 +5264,10 @@ read-pkg@^1.0.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" @@ -5099,6 +5278,13 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -5107,6 +5293,11 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -5115,31 +5306,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" - integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== - -remap-istanbul@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.13.0.tgz#a529dfd080bb760f5274e3671c9c065f29923ed1" - integrity sha512-rS5ZpVAx3fGtKZkiBe1esXg5mKYbgW9iz8kkADFt3p6lo3NsBBUX1q6SwdhwUtYCGnr7nK6gRlbYK3i8R0jbRA== - dependencies: - istanbul "0.4.5" - minimatch "^3.0.4" - plugin-error "^1.0.1" - source-map "0.6.1" - through2 "3.0.0" +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== remark-frontmatter@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.2.tgz#91d9684319cd1b96cc3d9d901f10a978f39c752d" - integrity sha512-2eayxITZ8rezsXdgcXnYB3iLivohm2V/ZT4Ne8uhua6A4pk6GdLE2ZzJnbnINtD1HRLaTdB7RwF9sgUbMptJZA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-1.3.3.tgz#67ec63c89da5a84bb793ecec166e11b4eb47af10" + integrity sha512-fM5eZPBvu2pVNoq3ZPW22q+5Ativ1oLozq2qYt9I2oNyxiUd/tDl0iLLntEVAegpZIslPWg1brhcP1VsaSVUag== dependencies: fault "^1.0.1" xtend "^4.0.1" @@ -5165,11 +5340,6 @@ remark-parse@^5.0.0: vfile-location "^2.0.0" xtend "^4.0.1" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" @@ -5192,7 +5362,7 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= -request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -5238,12 +5408,12 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - resolve-from "^3.0.0" + resolve-from "^5.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" @@ -5253,62 +5423,62 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@1.1.x, resolve@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.3: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.9.0: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== dependencies: + is-core-module "^2.0.0" path-parse "^1.0.6" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rfdc@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -rimraf@2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +rimraf@^3.0.0, rimraf@^3.0.2, rimraf@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -5320,36 +5490,20 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== - dependencies: - tslib "^1.9.0" +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-json-parse@~1.0.1: version "1.0.1" @@ -5368,15 +5522,15 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= +sass-graph@2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.5.tgz#a981c87446b8319d96dce0671e487879bd24c2e8" + integrity sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag== dependencies: glob "^7.0.0" lodash "^4.0.0" scss-tokenizer "^0.2.3" - yargs "^7.0.0" + yargs "^13.3.2" saucelabs@^1.5.0: version "1.5.0" @@ -5390,14 +5544,14 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== +schema-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" + integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" + "@types/json-schema" "^7.0.6" + ajv "^6.12.5" + ajv-keywords "^3.5.2" scss-tokenizer@^0.2.3: version "0.2.3" @@ -5417,20 +5571,20 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: tmp "0.0.30" xml2js "^0.4.17" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= +semver@^7.2.1, semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== send@0.17.1: version "0.17.1" @@ -5451,10 +5605,12 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" serve-index@^1.9.1: version "1.9.1" @@ -5469,7 +5625,7 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@^1.13.2, serve-static@^1.14.1: +serve-static@^1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== @@ -5529,15 +5685,32 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^2.1.0: version "2.1.0" @@ -5583,48 +5756,57 @@ socket.io-adapter@~1.1.0: resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== +socket.io-client@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== dependencies: backo2 "1.0.2" base64-arraybuffer "0.1.5" component-bind "1.0.0" component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" + debug "~4.1.0" + engine.io-client "~3.4.0" has-binary2 "~1.0.2" has-cors "1.1.0" indexof "0.0.1" object-component "0.0.3" parseqs "0.0.5" parseuri "0.0.5" - socket.io-parser "~3.2.0" + socket.io-parser "~3.3.0" to-array "0.1.4" -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== +socket.io-parser@~3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.1.tgz#f07d9c8cb3fb92633aa93e76d98fd3a334623199" + integrity sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ== dependencies: - component-emitter "1.2.1" + component-emitter "~1.3.0" debug "~3.1.0" isarray "2.0.1" -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== dependencies: - debug "~3.1.0" - engine.io "~3.2.0" + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== + dependencies: + debug "~4.1.0" + engine.io "~3.4.0" has-binary2 "~1.0.2" socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" -source-list-map@^2.0.0: +source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -5647,10 +5829,10 @@ source-map-support@~0.4.0: dependencies: source-map "^0.5.6" -source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== +source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -5660,11 +5842,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -5672,48 +5849,46 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.1, source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.7.3: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -5754,13 +5929,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - state-toggle@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" @@ -5794,65 +5962,44 @@ stream-browserify@2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-browserify@^2.0.1, stream-browserify@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" + inherits "~2.0.4" + readable-stream "^3.5.0" -stream-http@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" - integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== +stream-http@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.1.tgz#0370a8017cf8d050b9a8554afe608f043eaff564" + integrity sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg== dependencies: builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^3.0.6" - xtend "^4.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamroller@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" - integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" + integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.14" + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -5861,7 +6008,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5878,7 +6025,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -5887,46 +6034,28 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== +string.prototype.trimend@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46" + integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" + es-abstract "^1.18.0-next.1" -string.prototype.trimstart@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimstart@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7" + integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg== dependencies: define-properties "^1.1.3" - es-abstract "^1.17.5" + es-abstract "^1.18.0-next.1" string_decoder@0.10: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.2.0: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -5975,6 +6104,16 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" @@ -5982,10 +6121,10 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== structured-source@^3.0.2: version "3.0.2" @@ -5999,13 +6138,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6013,12 +6145,22 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: - has-flag "^3.0.0" + has-flag "^4.0.0" + +table-layout@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" + integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" table@^5.2.3: version "5.4.6" @@ -6030,58 +6172,76 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tapable@^1.0.0, tapable@^1.1.3: +tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== +tapable@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0.tgz#a49c3d6a8a2bb606e7db372b82904c970d537a08" + integrity sha512-bjzn0C0RWoffnNdTzNi7rNDhs1Zlwk2tRXgk8EiHKAOX1Mag3d6T0Y5zNa7l9CJ+EoUne/0UHdwS8tMbkh9zDg== + +tar-fs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.0.tgz#d1cdd121ab465ee0eb9ccde2d35049d3f3daf0d5" + integrity sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg== dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" - integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA== +tar-stream@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.4.tgz#c4fb1a11eb0da29b893a5b25476397ba2d053bfa" + integrity sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw== dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^2.1.2" + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" + integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terser-webpack-plugin@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz#ec60542db2421f45735c719d2e17dabfbb2e3e42" + integrity sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ== + dependencies: + jest-worker "^26.6.1" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" + terser "^5.3.8" -terser@^4.1.2: - version "4.6.4" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.4.tgz#40a0b37afbe5b57e494536815efa68326840fc00" - integrity sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w== +terser@^5.3.8: + version "5.3.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.8.tgz#991ae8ba21a3d990579b54aa9af11586197a75dd" + integrity sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ== dependencies: commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + source-map "~0.7.2" + source-map-support "~0.5.19" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" - integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ== - dependencies: - readable-stream "2 || 3" - xtend "~4.0.1" - -through2@^2.0.0, through2@~2.0.0: +through2@~2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -6089,7 +6249,7 @@ through2@^2.0.0, through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, through@^2.3.6: +through@2, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -6101,10 +6261,10 @@ timers-browserify@2.0.2: dependencies: setimmediate "^1.0.4" -timers-browserify@^2.0.10, timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== +timers-browserify@^2.0.11: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== dependencies: setimmediate "^1.0.4" @@ -6127,29 +6287,22 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmp@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" - integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== +tmp@0.2.1, tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: - rimraf "^2.6.3" + rimraf "^3.0.0" to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" @@ -6207,9 +6360,9 @@ trim-newlines@^1.0.0: integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-trailing-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" - integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== trim@0.0.1: version "0.0.1" @@ -6228,10 +6381,10 @@ trough@^1.0.0: dependencies: glob "^7.1.2" -ts-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef" - integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g== +ts-loader@^8.0.7: + version "8.0.7" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.7.tgz#9ce70db5b3906cc9143a09c54ff5247d102ea974" + integrity sha512-ooa4wxlZ9TOXaJ/iVyZlWsim79Ul4KyifSwyT2hOrbQA6NZJypsLOE198o8Ko+JV+ZHnMArvWcl4AnRqpCU/Mw== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -6239,15 +6392,10 @@ ts-loader@^6.2.1: micromatch "^4.0.0" semver "^6.0.0" -tslib@^1.8.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== - -tslib@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc" - integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg== +tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tsutils@^3.17.1: version "3.17.1" @@ -6256,11 +6404,6 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tty-browserify@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" @@ -6278,12 +6421,17 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: - prelude-ls "~1.1.2" + prelude-ls "^1.2.1" + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.8.1: version "0.8.1" @@ -6298,42 +6446,45 @@ type-is@~1.6.17: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" + integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== -typescript@3.4.5: - version "3.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" - integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw== +typical@^5.0.0, typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== -uglify-js@^3.1.4: - version "3.9.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.1.tgz#a56a71c8caa2d36b5556cc1fd57df01ae3491539" - integrity sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA== - dependencies: - commander "~2.20.3" +ua-parser-js@0.7.22: + version "0.7.22" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" + integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== uglify-js@^3.5.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" - integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" + version "3.11.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.11.4.tgz#b47b7ae99d4bd1dca65b53aaa69caa0909e6fadf" + integrity sha512-FyYnoxVL1D6+jDGQpbK5jW6y/2JlVfRfEeQ67BPCUg5wfCjaKOpr2XeceE4QL+MkhxliLtf5EbrMDZgzpt2CNw== ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== +unbzip2-stream@^1.3.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" + integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= -underscore.string@~3.3.4: +underscore.string@~3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== @@ -6376,20 +6527,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" @@ -6439,20 +6576,15 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - update-section@^0.3.0: version "0.3.3" resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158" integrity sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg= uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" @@ -6479,14 +6611,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -useragent@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6499,22 +6623,17 @@ util@0.10.3: dependencies: inherits "2.0.1" -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -util@^0.12.0: - version "0.12.2" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.2.tgz#54adb634c9e7c748707af2bf5a8c7ab640cbba2b" - integrity sha512-XE+MkWQvglYa+IOfBt5UFG93EmncEMP23UqpgDvVZVFBPxwmkK10QRp6pgU4xICPnWRf/t0zPv4noYSUq9gqUQ== +util@^0.12.0, util@^0.12.1: + version "0.12.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" is-generator-function "^1.0.7" + is-typed-array "^1.1.3" safe-buffer "^5.1.2" + which-typed-array "^1.1.2" utils-merge@1.0.1: version "1.0.1" @@ -6526,15 +6645,10 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -v8-compile-cache@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" - integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== - -v8-compile-cache@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== v8flags@~3.1.1: version "3.1.3" @@ -6582,12 +6696,7 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vm-browserify@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== - -vm-browserify@^1.0.1: +vm-browserify@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== @@ -6597,23 +6706,13 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== +watchpack@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.0.1.tgz#2f2192c542c82a3bcde76acd3411470c120426a8" + integrity sha512-vO8AKGX22ZRo6PiOFM9dC0re8IcKh8Kd/aH2zeqUc6w4/jBGlTy2P7fTC6ekT0NjVeGjgU2dGC5rNstKkeLEQg== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" wcwidth@^1.0.1: version "1.0.1" @@ -6647,66 +6746,76 @@ webdriver-manager@^12.0.6: semver "^5.3.0" xml2js "^0.4.17" -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== +webpack-cli@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.1.0.tgz#3a8fe05326015cc92b67abea68e3c320d418b16e" + integrity sha512-NdhxXMZmoik62Y05t0h1y65LjBM7BwFPq311ihXuMM3RY6dlc4KkCTyHLzTuBEc+bqq6d3xh+CWmU0xRexNJBA== + dependencies: + "@webpack-cli/info" "^1.0.2" + "@webpack-cli/serve" "^1.0.1" + ansi-escapes "^4.3.1" + colorette "^1.2.1" + command-line-usage "^6.1.0" + commander "^6.0.0" + enquirer "^2.3.4" + execa "^4.0.0" + import-local "^3.0.2" + interpret "^2.0.0" + rechoir "^0.7.0" + v8-compile-cache "^2.1.0" + webpack-merge "^4.2.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" + lodash "^4.17.15" -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" + source-list-map "^2.0.1" + source-map "^0.6.1" -webpack@^4.44.1: - version "4.44.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" - integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== +webpack@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.3.2.tgz#f88f6f2c54eaa1f68c8f37d8984657eaf68b00f0" + integrity sha512-DXsfHoI6lQAR3KnQh7+FsRfs9fs+TEvzXCA35UbKv4kVuzslg7QCMAcpFRZNDMjdtm9N/PoO54XEzGN9TeacQg== dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.45" "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" "@webassemblyjs/wasm-edit" "1.9.0" "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + acorn "^8.0.4" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" - eslint-scope "^4.0.3" + enhanced-resolve "^5.3.1" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + loader-runner "^4.1.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + pkg-dir "^4.2.0" + schema-utils "^3.0.0" + tapable "^2.0.0" + terser-webpack-plugin "^5.0.3" + watchpack "^2.0.0" + webpack-sources "^2.1.1" websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: - http-parser-js ">=0.4.0 <0.4.11" + http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" websocket-extensions ">=0.1.1" @@ -6716,9 +6825,9 @@ websocket-extensions@>=0.1.1: integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== websocket-stream@^5.0.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.5.0.tgz#9827f2846fc0d2b4dca7aab8f92980b2548b868e" - integrity sha512-EXy/zXb9kNHI07TIMz1oIUIrPZxQRA8aeJ5XYg5ihV8K4kD1DuA+FY6R96HfdIHzlSzS8HiISAfrm+vVQkZBug== + version "5.5.2" + resolved "https://registry.yarnpkg.com/websocket-stream/-/websocket-stream-5.5.2.tgz#49d87083d96839f0648f5513bbddd581f496b8a2" + integrity sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ== dependencies: duplexify "^3.5.1" inherits "^2.0.1" @@ -6727,23 +6836,37 @@ websocket-stream@^5.0.1: ws "^3.2.0" xtend "^4.0.0" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0: +which-typed-array@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.2.tgz#e5f98e56bda93e3dac196b01d47c1156679c00b2" + integrity sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ== + dependencies: + available-typed-arrays "^1.0.2" + es-abstract "^1.17.5" + foreach "^2.0.5" + function-bind "^1.1.1" + has-symbols "^1.0.1" + is-typed-array "^1.1.3" + +which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -6751,27 +6874,18 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== +wordwrapjs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" + integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== dependencies: - errno "~0.1.7" + reduce-flatten "^2.0.0" + typical "^5.0.0" wrap-ansi@^2.0.0: version "2.1.0" @@ -6790,6 +6904,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -6802,7 +6925,7 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@^3.2.0, ws@~3.3.1: +ws@^3.2.0: version "3.3.3" resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== @@ -6811,10 +6934,15 @@ ws@^3.2.0, ws@~3.3.1: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== +ws@^7.1.2, ws@^7.2.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== dependencies: async-limiter "~1.0.0" @@ -6841,30 +6969,28 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" yargs-parser@^13.1.2: version "13.1.2" @@ -6874,12 +7000,31 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: - camelcase "^3.0.0" + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" yargs@^13.3.2: version "13.3.2" @@ -6897,31 +7042,30 @@ yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= dependencies: - fd-slicer "~1.0.1" + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" yeast@0.1.2: version "0.1.2" From 7f6402d3070f7a9bf59d18f24c59d7cbdb661ce7 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 2 Nov 2020 07:20:59 -0800 Subject: [PATCH 0298/1298] let user bring own jQuery/jQuery-ui * fix for #1420 * we now don't force our own copied of jquery/jqeury-ui in case apps have their own copies already * gridstack.all.js still have everything (single include) TODO update include help --- karma.conf.js | 10 ++++++++++ src/gridstack.ts | 1 - src/jq/gridstack-dd-jqueryui.ts | 9 +++++---- src/jq/jquery-ui.js | 3 +-- src/jq/jquery.js | 4 ++-- webpack.config.js | 4 ++-- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/karma.conf.js b/karma.conf.js index 31846724e..b07f710c2 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -2,9 +2,19 @@ module.exports = function(config) { config.set({ + + // see https://www.npmjs.com/package/karma-typescript karmaTypescriptConfig: { compilerOptions: { lib: ['dom', 'es6'], + }, + bundlerOptions: { + resolve: { + alias: { + 'jquery': './src/jq/jquery.js', + 'jquery-ui': './src/jq/jquery-ui.js', + } + } } }, diff --git a/src/gridstack.ts b/src/gridstack.ts index cc8bc2d13..65aaa0fe7 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -18,7 +18,6 @@ export * from './gridstack-engine'; export * from './gridstack-dd'; // TEMPORARY import the jquery-ui drag&drop since we don't have alternative yet and don't expect users to create their own yet -import './jq/gridstack-dd-jqueryui'; export * from './jq/gridstack-dd-jqueryui'; export type GridStackElement = string | HTMLElement | GridItemHTMLElement; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index f08b70fab..a712d6a8f 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -10,11 +10,12 @@ import { GridStack, GridStackElement } from '../gridstack'; import { GridStackDD, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dd'; import { GridItemHTMLElement, DDDragInOpt } from '../types'; -// export all jq symbols see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs -// TODO: let user bring their own jq or jq-ui version -import * as $ from './jquery'; +// export jq symbols see +// https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs +// https://stackoverflow.com/questions/33998262/jquery-ui-and-webpack-how-to-manage-it-into-module +import * as $ from 'jquery'; export { $ }; -export * from './jquery-ui'; +import 'jquery-ui'; /** * legacy Jquery-ui based drag'n'drop plugin. diff --git a/src/jq/jquery-ui.js b/src/jq/jquery-ui.js index 4030bdfb9..0d1411c2e 100644 --- a/src/jq/jquery-ui.js +++ b/src/jq/jquery-ui.js @@ -5,12 +5,11 @@ */ (function( factory ) { - /* [alain] we compile this in so no need to load with AMD if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery" ], factory ); - } else */{ + } else { // Browser globals factory( jQuery ); diff --git a/src/jq/jquery.js b/src/jq/jquery.js index 23c2a1e72..c58940c24 100644 --- a/src/jq/jquery.js +++ b/src/jq/jquery.js @@ -10861,8 +10861,8 @@ jQuery.noConflict = function( deep ) { // Expose jQuery and $ identifiers, even in AMD // (#7102#comment:10, https://github.com/jquery/jquery/pull/557) // and CommonJS for browser emulators (#13566) -//if ( !noGlobal ) { [alain] noGlobal=true when using webpack/TS, yet we compile this in, not AMD load, so always expose - window.jQuery = window.$ = jQuery; +//if ( !noGlobal ) { [alain] noGlobal=true when using runing karma test cases, not sure how to run otherwise... + window.jQuery = window.$ = jQuery; //} diff --git a/webpack.config.js b/webpack.config.js index 2933dc88f..e59de811f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -22,8 +22,8 @@ module.exports = { resolve: { extensions: [ '.ts', '.js' ], alias: { - 'jquery': './src/jq/jquery.js', - 'jquery-ui': './src/jq/jquery-ui.js', + 'jquery': '/src/jq/jquery.js', + 'jquery-ui': '/src/jq/jquery-ui.js', } }, output: { From 7109f741ce9594d3f279b801aa9c82b485335091 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 2 Nov 2020 16:36:19 -0800 Subject: [PATCH 0299/1298] reverted to compiling our jquery as I can't get apps or libs (TS in my case) to include jq and compile... #1420 --- src/jq/gridstack-dd-jqueryui.ts | 5 +++-- src/jq/jquery-ui.js | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index a712d6a8f..64b91881c 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -13,9 +13,10 @@ import { GridItemHTMLElement, DDDragInOpt } from '../types'; // export jq symbols see // https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs // https://stackoverflow.com/questions/33998262/jquery-ui-and-webpack-how-to-manage-it-into-module -import * as $ from 'jquery'; +// TODO: let user bring their own jq or jq-ui version +import * as $ from './jquery'; // compile this in... having issues TS/ES6 app would include instead export { $ }; -import 'jquery-ui'; +import './jquery-ui'; /** * legacy Jquery-ui based drag'n'drop plugin. diff --git a/src/jq/jquery-ui.js b/src/jq/jquery-ui.js index 0d1411c2e..14d4a9d9b 100644 --- a/src/jq/jquery-ui.js +++ b/src/jq/jquery-ui.js @@ -5,11 +5,12 @@ */ (function( factory ) { + /* [alain] we compile this in so no need to load with AMD if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery" ], factory ); - } else { + } else */ { // Browser globals factory( jQuery ); From 9ed0eb1824a58693cf1d868531cf48c890f81394 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 2 Nov 2020 22:39:23 -0800 Subject: [PATCH 0300/1298] added ui-XYZ-disable style back * fix for 1435 * `class="ui-draggable-disabled ui-resizable-disabled"` have been added back to static grid items, so existing CSS rule to style continue working * add `data-gs-staticGrid` attribute --- demo/static.html | 5 +++-- doc/CHANGES.md | 3 ++- doc/README.md | 2 +- spec/gridstack-spec.ts | 2 +- src/gridstack.ts | 37 ++++++++++++++++++++++++------------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/demo/static.html b/demo/static.html index 1db9afc78..52ab0f622 100644 --- a/demo/static.html +++ b/demo/static.html @@ -13,19 +13,20 @@

    Static vs can move/drag Demo

    +

    we start with a static grid (no drag&drop initialized) with button to make it editable.



    -
    +
    + + ``` .map files are included for debugging purposes. @@ -194,7 +194,7 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 9f59b5bb6..5d9dda942 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [2.1.0-dev](#210-dev) +- [2.2.0-dev](#220-dev) +- [2.2.0 (2020-11-7)](#220-2020-11-7) - [2.1.0 (2020-10-28)](#210-2020-10-28) - [2.0.2 (2020-10-05)](#202-2020-10-05) - [2.0.1 (2020-09-26)](#201-2020-09-26) @@ -40,13 +41,17 @@ Change log -## 2.1.0-dev +## 2.2.0-dev -- fix `class="ui-draggable-disabled ui-resizable-disabled"` have been added back to static grid items, so existing CSS rule to style continue working [1435](https://github.com/gridstack/gridstack.js/issues/1435) +- TBD + +## 2.2.0 (2020-11-7) + +- add `margin` option now support multi values CSS format `'5px 10px 0 20px'` or `'5em 10em'` - add `data-gs-static-grid` attribute +- fix `class="ui-draggable-disabled ui-resizable-disabled"` have been added back to static grid items, so existing CSS rule to style continue working [1435](https://github.com/gridstack/gridstack.js/issues/1435) - fix getting DOM element by id with number works (api that uses `GridStackElement` handle more string formats) - fix setting `marginTop` (or any 4 sides) to cause resize to break. Thanks [@deadivan](https://github.com/deadivan) for suggested fix. -- add `margin` support multi CSS format `'5px 10px 0 20px'` or `'5em 10em'` ## 2.1.0 (2020-10-28) diff --git a/package.json b/package.json index 59db8b03f..5b3aa7bed 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "2.1.0-dev", + "version": "2.2.0-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index e1bfe9af0..821f8390e 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-dd.ts 2.1.0-dev @preserve +// gridstack-dd.ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 7ea86b764..d31e0e8ea 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 2.1.0-dev @preserve +// gridstack-engine.ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack.ts b/src/gridstack.ts index 1ff7542ca..d1f67de11 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 2.1.0-dev @preserve +// gridstack.ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 64b91881c..5ee48714d 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 2.1.0-dev @preserve +// gridstack-dd-jqueryui.ts 2.2.0-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index cc2a41fe0..0a0bdef78 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 2.1.0-dev @preserve +// types.ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index 5d64313a5..a34d2d42c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 2.1.0-dev @preserve +// utils.ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ From 365db4195ea31a348fe74f1276e3095ffe73a18a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 7 Nov 2020 07:09:48 -0800 Subject: [PATCH 0305/1298] doc update --- doc/CHANGES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 5d9dda942..ec103b1a8 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -49,9 +49,9 @@ Change log - add `margin` option now support multi values CSS format `'5px 10px 0 20px'` or `'5em 10em'` - add `data-gs-static-grid` attribute -- fix `class="ui-draggable-disabled ui-resizable-disabled"` have been added back to static grid items, so existing CSS rule to style continue working [1435](https://github.com/gridstack/gridstack.js/issues/1435) -- fix getting DOM element by id with number works (api that uses `GridStackElement` handle more string formats) -- fix setting `marginTop` (or any 4 sides) to cause resize to break. Thanks [@deadivan](https://github.com/deadivan) for suggested fix. +- fix [1435](https://github.com/gridstack/gridstack.js/issues/1435) `class="ui-draggable-disabled ui-resizable-disabled"` have been added back to static grid items, so existing CSS rule to style continue working +- fix [1439](https://github.com/gridstack/gridstack.js/pull/1439) getting DOM element by id with number works (api that uses `GridStackElement` handle more string formats) +- fix [1442](https://github.com/gridstack/gridstack.js/pull/1442) setting `marginTop` (or any 4 sides) to cause resize to break. Thanks [@deadivan](https://github.com/deadivan) for suggested fix. ## 2.1.0 (2020-10-28) From 4562d80f2d2c14f4c4345ce011c471cbdc2cee45 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 14 Nov 2020 11:29:08 -0800 Subject: [PATCH 0306/1298] removed CDN examples - use npm packaging instead --- README.md | 79 ++++++++++++++++++++----------------------------------- 1 file changed, 28 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 307f490bc..3b9d5a754 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -gridstack.js -============ +# gridstack.js [![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) [![Dependency Status](https://david-dm.org/gridstack/gridstack.js.svg)](https://david-dm.org/gridstack/gridstack.js) @@ -39,29 +38,24 @@ Join us on Slack: https://gridstackjs.troolee.com - [Custom columns CSS](#custom-columns-css) - [Override resizable/draggable options](#override-resizabledraggable-options) - [Touch devices support](#touch-devices-support) - - [Migrating to v0.6](#migrating-to-v06) - - [Migrating to v1](#migrating-to-v1) - - [jQuery Application](#jquery-application) - - [Migrating to v2](#migrating-to-v2) +- [Migrating to v0.6](#migrating-to-v06) +- [Migrating to v1](#migrating-to-v1) +- [Migrating to v2](#migrating-to-v2) +- [jQuery Application](#jquery-application) - [Changes](#changes) - [The Team](#the-team) -Demo and examples -==== +# Demo and examples Please visit http://gridstackjs.com and [these demos](http://gridstackjs.com/demo/) -Usage -===== +# Usage ## Install - -* Using yarn / npm: - [![NPM version](https://img.shields.io/npm/v/gridstack.svg)](https://www.npmjs.com/package/gridstack) ```js @@ -76,32 +70,16 @@ ES6 or Typescript ```js import { GridStack } from 'gridstack'; -import 'gridstack/dist/gridstack.css'; -``` - -legacy javascript. If you need to import individual files (see [jquery apps](#jquery-application) section) - -```js -import 'gridstack/dist/gridstack.all.js'; -import 'gridstack/dist/gridstack.css'; +import 'gridstack/dist/gridstack.min.css'; ``` alternatively in html ```html - + ``` -or using CDN (minimized): - -```html - - -``` - -.map files are included for debugging purposes. - ## Basic usage creating items dynamically... @@ -149,7 +127,7 @@ see [jsfiddle sample](https://jsfiddle.net/adumesny/jqhkry7g) as running example ## Requirements -GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). All you need to include is `gridstack.all.js` and `gridstack.css` (layouts are done using CSS column based %). +GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). All you need to include is `gridstack.all.js` and `gridstack.min.css` (layouts are done using CSS column based %). ## API Documentation @@ -177,11 +155,11 @@ grid.printCount(); search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... - vue.js: see [demo v3](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue3js.html) or [demo v2](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue2js.html) +- React: [react gridstack example](https://github.com/Inder2108/react-gridstack-example) - ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) +- Angular9: [lb-gridstack](https://github.com/pfms84/lb-gridstack) Note: very old v0.3 gridstack instance. recommend for concept ONLY. Working on creating an Angular wrapper as that is we use ourself... - AngularJS: [gridstack-angular](https://github.com/kdietrich/gridstack-angular) -- Angular8: [lb-gridstack](https://github.com/pfms84/lb-gridstack) - Rails: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails) -- React: [react-gridstack](https://github.com/pitrho/react-gridstack) ## Change grid columns @@ -194,12 +172,12 @@ GridStack.init( {column: N} ); 2) include `gridstack-extra.css` if **N < 12** (else custom CSS - see next). Without these, things will not render/work correctly. ```html - +
    ...
    ``` -Note: we added `grid-stack-N` class and `gridstack-extra.css` which defines CSS for grids with custom [1-12] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). +Note: we added `.grid-stack-N` and include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns @@ -300,11 +278,11 @@ GridStack.init(options); If you're still experiencing issues on touch devices please check [#444](https://github.com/gridstack/gridstack.js/issues/444) -## Migrating to v0.6 +# Migrating to v0.6 starting in 0.6.x `change` event are no longer sent (for pretty much most nodes!) when an item is just added/deleted unless it also changes other nodes (was incorrect and causing inefficiencies). You may need to track `added|removed` [events](https://github.com/gridstack/gridstack.js/tree/develop/doc#events) if you didn't and relied on the old broken behavior. -## Migrating to v1 +# Migrating to v1 v1.0.0 removed Jquery from the API and external dependencies, which will require some code changes. Here is a list of the changes: @@ -355,15 +333,7 @@ Other changes Recommend looking at the [many samples](./demo) for more code examples. -### jQuery Application - -We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.5.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring your own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your JQ libs. But note that there are issue with jQuery and ES6 import (see [1306](https://github.com/gridstack/gridstack.js/issues/1306)). - -Note: v2.0.0 does not currently support importing GridStack Drag&Drop without also including our jquery + jqueryui. Still trying to figure how to make that bundle possible. You will have to use 1.x - -As for events, you can still use `$(".grid-stack").on(...)` while jqueryui is used internally for things we don't support, but recommended you don't as that will get dropped at some point. - -## Migrating to v2 +# Migrating to v2 make sure to read v1 migration first! @@ -386,13 +356,20 @@ v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes a **Note:** 2.x no longer support legacy IE11 and older due to using more compact ES6 output and typecsript native code. You will need to stay at 1.x -Changes -===== +# jQuery Application + +We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.5.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring your own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your JQ libs. But note that there are issue with jQuery and ES6 import (see [1306](https://github.com/gridstack/gridstack.js/issues/1306)). + +Note: v2.0.0 does not currently support importing GridStack Drag&Drop without also including our jquery + jqueryui. Still trying to figure how to make that bundle possible. You will have to use 1.x + +As for events, you can still use `$(".grid-stack").on(...)` while jqueryui is used internally for things we don't support, but recommended you don't as that will get dropped at some point. + + +# Changes View our change log [here](https://github.com/gridstack/gridstack.js/tree/develop/doc/CHANGES.md). -The Team -======== +# The Team gridstack.js is currently maintained by [Alain Dumesny](https://github.com/adumesny) and [Dylan Weiss](https://github.com/radiolips), originally created by [Pavel Reznikov](https://github.com/troolee). We appreciate [all contributors](https://github.com/gridstack/gridstack.js/graphs/contributors) for help. From 60485647259789f5c59138a304232f5e0baaffae Mon Sep 17 00:00:00 2001 From: rhlin Date: Thu, 29 Oct 2020 11:52:45 -0700 Subject: [PATCH 0307/1298] feat(h5dd): h5dd plugin performance optimize draggable 1. use requireAnimateFrame 2. set up will change 3. use passive event if possible 4. change helper position from 'fixed' to 'absolute' to avoide flicker 5. dragend event binding after dragstart 6. fix removing ui-draggable-dragging class for drag-in element droppable 1. pre transform accept to function on init from https://github.com/rhlin/gridstack.js feat-h5dd-optimize --- src/dragdrop/dd-draggable.ts | 315 +++++++++++++++++++++++++++++++++++ src/dragdrop/dd-droppable.ts | 154 +++++++++++++++++ src/dragdrop/dd-utils.ts | 102 ++++++++++++ 3 files changed, 571 insertions(+) create mode 100644 src/dragdrop/dd-draggable.ts create mode 100644 src/dragdrop/dd-droppable.ts create mode 100644 src/dragdrop/dd-utils.ts diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts new file mode 100644 index 000000000..50c703217 --- /dev/null +++ b/src/dragdrop/dd-draggable.ts @@ -0,0 +1,315 @@ +// dd-draggable.ts 2.0.2-dev @preserve + +/** + * https://gridstackjs.com/ + * (c) 2020 Alain Dumesny, rhlin + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDManager } from './dd-manager'; +import { DDUtils } from './dd-utils'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; + +export interface DDDraggbleOpt { + appendTo?: string | HTMLElement; + containment?: string | HTMLElement; + handle?: string; + revert?: string | boolean | unknown; // TODO: not impleament yet + scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually + helper?: string | ((event: Event) => HTMLElement); + basePosision?: 'fixed' | 'absolute'; + start?: (event?, ui?) => void; + stop?: (event?, ui?) => void; + drag?: (event?, ui?) => void; +}; +export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt { + static basePosition: 'fixed'| 'absolute'= 'absolute'; + static dragEventListinerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; + static originStyleProp = ['transition', 'pointerEvents', 'position', + 'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange']; + el: HTMLElement; + helper: HTMLElement; + option: DDDraggbleOpt; + dragOffset: { + left: number; + top: number; + width: number; + height: number; + offsetLeft: number; + offsetTop: number; + }; + dragElementOriginStyle: Array; + dragFollowTimer: number; + mouseDownElement: HTMLElement; + dragging = false; + paintTimer: number; + parentOriginStylePosition: string; + helperContainment: HTMLElement; + + constructor(el: HTMLElement, option: DDDraggbleOpt) { + super(); + this.el = el; + this.option = option || {}; + this.init(); + } + + on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + + off(event: 'drag' | 'dragstart' | 'dragstop') { + super.off(event); + } + + enable() { + super.enable(); + this.el.draggable = true; + this.el.classList.remove('ui-draggable-disabled'); + } + + disable() { + super.disable(); + this.el.draggable = false; + this.el.classList.add('ui-draggable-disabled'); + } + + updateOption(opts) { + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + } + + protected init() { + this.el.draggable = true; + this.el.classList.add('ui-draggable'); + this.el.addEventListener('mousedown', this.mouseDown); + this.el.addEventListener('dragstart', this.dragStart); + this.dragThrottle = DDUtils.throttle(this.drag, 100); + } + + protected mouseDown = (event: MouseEvent) => { + this.mouseDownElement = event.target as HTMLElement; + } + + protected dragStart = (event: DragEvent) => { + if (this.option.handle && !( + this.mouseDownElement + && this.mouseDownElement.matches( + `${this.option.handle}, ${this.option.handle} > *` + ) + )) { + event.preventDefault(); + return; + } + DDManager.dragElement = this; + this.helper = this.createHelper(event); + this.setupHelperContainmentStyle(); + this.dragOffset = this.getDragOffset(event, this.el, this.helperContainment); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstart' }); + if (this.helper !== this.el) { + this.setupDragFollowNodeNNotifyStart(ev); + } else { + this.dragFollowTimer = setTimeout(() => { + this.dragFollowTimer = undefined; + this.setupDragFollowNodeNNotifyStart(ev); + }, 0); + } + this.cancelDragGhost(event); + } + + protected setupDragFollowNodeNNotifyStart(ev) { + this.setupHelperStyle(); + document.addEventListener('dragover', this.dragThrottle, DDDraggble.dragEventListinerOption); + this.el.addEventListener('dragend', this.dragEnd); + if (this.option.start) { + this.option.start(ev, this.ui()); + } + this.triggerEvent('dragstart', ev); + this.dragging = true; + this.helper.classList.add('ui-draggable-dragging'); + } + + protected dragThrottle: (event: DragEvent) => void; + protected drag = (event: DragEvent) => { + this.dragFollow(event); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'drag' }); + if (this.option.drag) { + this.option.drag(ev, this.ui()); + } + this.triggerEvent('drag', ev); + } + + protected dragEnd = (event: DragEvent) => { + if (this.dragFollowTimer) { + clearTimeout(this.dragFollowTimer); + this.dragFollowTimer = undefined; + return; + } else { + document.removeEventListener('dragover', this.dragThrottle, DDDraggble.dragEventListinerOption); + this.el.removeEventListener('dragend', this.dragEnd); + } + this.dragging = false; + this.helper.classList.remove('ui-draggable-dragging'); + this.helperContainment.style.position = this.parentOriginStylePosition || null; + if (this.helper === this.el) { + this.removeHelperStyle(); + } else { + this.helper.remove(); + } + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dragstop' }); + if (this.option.stop) { + this.option.stop(ev, this.ui()); + } + this.triggerEvent('dragstop', ev); + DDManager.dragElement = undefined; + this.helper = undefined; + this.mouseDownElement = undefined; + } + + private createHelper(event: DragEvent) { + const helperIsFunction = (typeof this.option.helper) === 'function'; + const helper = (helperIsFunction + ? (this.option.helper as ((event: Event) => HTMLElement)).apply(this.el, [event]) + : (this.option.helper === "clone" ? DDUtils.clone(this.el) : this.el) + ) as HTMLElement; + if (!document.body.contains(helper)) { + DDUtils.appendTo(helper, (this.option.appendTo === "parent" + ? this.el.parentNode + : this.option.appendTo)); + } + if (helper === this.el) { + this.dragElementOriginStyle = DDDraggble.originStyleProp.map(prop => this.el.style[prop]); + } + return helper; + } + + private setupHelperStyle() { + this.helper.style.pointerEvents = 'none'; + this.helper.style.width = this.dragOffset.width + 'px'; + this.helper.style.height = this.dragOffset.height + 'px'; + this.helper.style['willChange'] = 'left, top'; + this.helper.style.transition = 'none'; // show up instancely + this.helper.style.position = this.option.basePosision || DDDraggble.basePosition; + this.helper.style.zIndex = '1000'; + setTimeout(() => { + this.helper.style.transition = null; // recover animation + }, 100); + } + + private removeHelperStyle() { + DDDraggble.originStyleProp.forEach(prop => { + this.helper.style[prop] = this.dragElementOriginStyle[prop] || null; + }); + this.dragElementOriginStyle = undefined; + } + + private dragFollow = (event: DragEvent) => { + if (this.paintTimer) { + cancelAnimationFrame(this.paintTimer); + } + this.paintTimer = requestAnimationFrame(() => { + this.paintTimer = undefined; + const offset = this.dragOffset; + this.helper.style.left = event.clientX + offset.offsetLeft + 'px'; + this.helper.style.top = event.clientY + offset.offsetTop + 'px'; + }); + } + + private setupHelperContainmentStyle() { + this.helperContainment = this.helper.parentElement; + if (this.option.basePosision !== 'fixed') { + this.parentOriginStylePosition = this.helperContainment.style.position; + if (window.getComputedStyle(this.helperContainment).position.match(/static/)) { + this.helperContainment.style.position = 'relative'; + } + } + } + + private cancelDragGhost(e: DragEvent) { + if (e.dataTransfer != null) { + e.dataTransfer.setData('text', ''); + } + e.dataTransfer.effectAllowed = 'move'; + if ('function' === typeof DataTransfer.prototype.setDragImage) { + e.dataTransfer.setDragImage(new Image(), 0, 0); + } else { + // ie + (e.target as HTMLElement).style.display = 'none'; + setTimeout(() => { + (e.target as HTMLElement).style.display = ''; + }); + e.stopPropagation(); + return; + } + e.stopPropagation(); + } + + private getDragOffset(event: DragEvent, el: HTMLElement, attachedParent: HTMLElement) { + // in case ancestor has transform/perspective css properies that change the viewpoint + const getViewPointFromParent = (parent) => { + if (!parent) { return null; } + const testEl = document.createElement('div'); + DDUtils.addElStyles(testEl, { + opacity: '0', + position: this.option.basePosision || DDDraggble.basePosition, + top: 0 + 'px', + left: 0 + 'px', + width: '1px', + height: '1px', + zIndex: '-999999', + }); + parent.appendChild(testEl); + const testElPosition = testEl.getBoundingClientRect(); + parent.removeChild(testEl); + return { + offsetX: testElPosition.left, + offsetY: testElPosition.top + }; + } + const targetOffset = el.getBoundingClientRect(); + const mousePositionXY = { + x: event.clientX, + y: event.clientY + }; + const transformOffset = getViewPointFromParent(attachedParent); + return { + left: targetOffset.left, + top: targetOffset.top, + offsetLeft: - mousePositionXY.x + targetOffset.left - transformOffset.offsetX, + offsetTop: - mousePositionXY.y + targetOffset.top - transformOffset.offsetY, + width: targetOffset.width, + height: targetOffset.height + }; + } + destroy() { + if (this.dragging) { + // Destroy while draggging should remove dragend listener and manally trigger + // dragend, otherwise dragEnd can't perform dragstop becasue eventResistry is + // destoryed. + this.dragEnd({} as DragEvent); + } + this.el.draggable = false; + this.el.classList.remove('ui-draggable'); + this.el.removeEventListener('dragstart', this.dragStart); + this.el = undefined; + this.helper = undefined; + this.option = undefined; + super.destroy(); + } + + ui = () => { + const containmentEl = this.el.parentElement; + const containmentRect = containmentEl.getBoundingClientRect(); + const offset = this.helper.getBoundingClientRect(); + return { + helper: [this.helper], //The object arr representing the helper that's being dragged. + position: { + top: offset.top - containmentRect.top, + left: offset.left - containmentRect.left + }, //Current CSS position of the helper as { top, left } object + offset: { top: offset.top, left: offset.left }// Current offset position of the helper as { top, left } object. + }; + } +} + + diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts new file mode 100644 index 000000000..fbfeed7dd --- /dev/null +++ b/src/dragdrop/dd-droppable.ts @@ -0,0 +1,154 @@ +// dd-droppable.ts 2.0.2-dev @preserve + +/** + * https://gridstackjs.com/ + * (c) 2020 Alain Dumesny, rhlin + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDDraggble } from './dd-draggable'; +import { DDManager } from './dd-manager'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; +import { DDUtils } from './dd-utils'; + +export interface DDDropableOpt { + accept?: string | ((el: HTMLElement) => boolean); + drop?: (event: DragEvent, ui) => void; + over?: (event: DragEvent, ui) => void; + out?: (event: DragEvent, ui) => void; +}; +export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt { + accept: (el: HTMLElement) => boolean; + el: HTMLElement; + option: DDDropableOpt; + private count = 0; + private dragEl: HTMLElement; + constructor(el: HTMLElement, opts: DDDropableOpt) { + super(); + this.el = el; + this.option = opts || {}; + this.init(); + } + on(event: 'drop' | 'dropover' | 'dropout', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + off(event: 'drop' | 'dropover' | 'dropout') { + super.off(event); + } + enable() { + if (!this.disabled) { return; } + super.enable(); + this.el.classList.remove('ui-droppable-disabled'); + this.el.addEventListener('dragenter', this.dragEnter); + this.el.addEventListener('dragover', this.dragOver); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); + } + disable() { + if (this.disabled) { return; } + super.disable(); + this.el.classList.add('ui-droppable-disabled'); + this.el.removeEventListener('dragenter', this.dragEnter); + this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); + } + updateOption(opts) { + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + this.setupAccept(); + } + + protected init() { + this.el.classList.add('ui-droppable'); + this.el.addEventListener('dragenter', this.dragEnter); + this.el.addEventListener('dragover', this.dragOver); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); + this.setupAccept(); + } + + protected dragEnter = (event: DragEvent) => { + if (this.canDrop()) { + if (0 === this.count) { + this.dragEl = DDManager.dragElement.el; + this.dragEl.addEventListener('dragend', this.resetCount); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); + if (this.option.over) { + this.option.over(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('dropover', ev); + event.preventDefault(); + } + } + this.count++; + } + protected dragOver = (event: DragEvent) => { + if (this.canDrop()) { + event.preventDefault(); + event.stopPropagation(); + } + } + protected dragLeave = (event: DragEvent) => { + this.count--; + if (this.canDrop()) { + if (0 === this.count) { + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); + if (this.option.out) { + this.option.out(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('dropout', ev); + } + event.preventDefault(); + } + } + protected drop = (event: DragEvent) => { + if (this.canDrop()) { + const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); + if (this.option.drop) { + this.option.drop(ev, this.ui(DDManager.dragElement)) + } + this.triggerEvent('drop', ev); + event.preventDefault(); + this.count = 0; + } + } + private resetCount = () => { + this.count = 0; + this.dragEl.removeEventListener('dragend', this.resetCount); + this.dragEl = undefined; + } + private canDrop() { + return DDManager.dragElement && (!this.accept || this.accept(DDManager.dragElement.el)); + } + private setupAccept() { + if (this.option.accept && typeof this.option.accept === 'string') { + this.accept = (el: HTMLElement) => { + return el.matches(this.option.accept as string) + } + } else { + this.accept = this.option.accept as ((el: HTMLElement) => boolean); + } + } + + destroy() { + this.el.classList.remove('ui-droppable'); + if (this.disabled) { + this.el.classList.remove('ui-droppable-disabled'); + this.el.removeEventListener('dragenter', this.dragEnter); + this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); + } + super.destroy(); + } + + ui(ddDraggble: DDDraggble) { + return { + draggable: ddDraggble.el, + ...ddDraggble.ui() + }; + } +} + diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts new file mode 100644 index 000000000..e4e8f7215 --- /dev/null +++ b/src/dragdrop/dd-utils.ts @@ -0,0 +1,102 @@ +// dd-utils.ts 2.0.2-dev @preserve + +/** + * https://gridstackjs.com/ + * (c) 2020 Alain Dumesny, rhlin + * gridstack.js may be freely distributed under the MIT license. +*/ +export class DDUtils { + static isEventSupportPassiveOption = ((()=>{ + let supportsPassive = false; + let passiveTest = () => { + // do nothing + }; + document.addEventListener('test', passiveTest, { + get passive() { + supportsPassive = true; + return true; + } + }); + document.removeEventListener('test', passiveTest); + return supportsPassive; + })()); + + static clone(el: HTMLElement): HTMLElement { + const node = el.cloneNode(true) as HTMLElement; + node.removeAttribute('id'); + return node; + } + + static appendTo(el: HTMLElement, parent: string | HTMLElement | Node) { + let parentNode: HTMLElement; + if (typeof parent === 'string') { + parentNode = document.querySelector(parent as string); + } else { + parentNode = parent as HTMLElement; + } + if (parentNode) { + parentNode.append(el); + } + } + static setPositionRelative(el) { + if (!(/^(?:r|a|f)/).test(window.getComputedStyle(el).position)) { + el.style.position = "relative"; + } + } + + static throttle(callback: (...args) => void, delay: number) { + let isWaiting = false; + + return (...args) => { + if (!isWaiting) { + callback(...args); + isWaiting = true; + setTimeout(() => isWaiting = false, delay); + } + } + } + static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }) { + if (styles instanceof Object) { + for (const s in styles) { + if (styles.hasOwnProperty(s)) { + if (Array.isArray(styles[s])) { + // support fallback value + (styles[s] as string[]).forEach(val => { + el.style[s] = val; + }); + } else { + el.style[s] = styles[s]; + } + } + } + } + } + static copyProps(dst, src, props) { + for (let i = 0; i < props.length; i++) { + const p = props[i]; + dst[p] = src[p]; + } + } + + static initEvent(e: DragEvent|MouseEvent, info: {type: string; target?: EventTarget}) { + const kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(','); + const ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(','); + const evt = {type: info.type}; + const obj = { + button: 0, + which: 0, + buttons: 1, + bubbles: true, + cancelable: true, + originEvent: e, + target: info.target? info.target : e.target + } + if (e instanceof DragEvent) { + Object.assign(obj, {dataTransfer: e.dataTransfer}); + } + DDUtils.copyProps(evt, e, kbdProps); + DDUtils.copyProps(evt, e, ptProps); + DDUtils.copyProps(evt, obj, Object.keys(obj)); + return evt as unknown as T; + } +} From 95db9d30028dced228d67c1b9e5d18623f576d46 Mon Sep 17 00:00:00 2001 From: rhlin Date: Thu, 29 Oct 2020 11:53:35 -0700 Subject: [PATCH 0308/1298] fix(h5dd): fix animation not cancel after dragend from https://github.com/rhlin/gridstack.js feat-h5dd-optimize --- src/dragdrop/dd-draggable.ts | 14 +++++++++++--- src/dragdrop/dd-droppable.ts | 24 +++++++++++------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts index 50c703217..6793d2ab7 100644 --- a/src/dragdrop/dd-draggable.ts +++ b/src/dragdrop/dd-draggable.ts @@ -145,6 +145,9 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.dragFollowTimer = undefined; return; } else { + if (this.paintTimer) { + cancelAnimationFrame(this.paintTimer); + } document.removeEventListener('dragover', this.dragThrottle, DDDraggble.dragEventListinerOption); this.el.removeEventListener('dragend', this.dragEnd); } @@ -210,8 +213,13 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.paintTimer = requestAnimationFrame(() => { this.paintTimer = undefined; const offset = this.dragOffset; - this.helper.style.left = event.clientX + offset.offsetLeft + 'px'; - this.helper.style.top = event.clientY + offset.offsetTop + 'px'; + let containmentRect = {left: 0, top: 0}; + if (this.helper.style.position === 'absolute') { + const {left, top} = this.helperContainment.getBoundingClientRect(); + containmentRect = {left, top}; + } + this.helper.style.left = event.clientX + offset.offsetLeft - containmentRect.left + 'px'; + this.helper.style.top = event.clientY + offset.offsetTop - containmentRect.top + 'px'; }); } @@ -251,7 +259,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< const testEl = document.createElement('div'); DDUtils.addElStyles(testEl, { opacity: '0', - position: this.option.basePosision || DDDraggble.basePosition, + position: 'fixed', top: 0 + 'px', left: 0 + 'px', width: '1px', diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts index fbfeed7dd..6bc63a506 100644 --- a/src/dragdrop/dd-droppable.ts +++ b/src/dragdrop/dd-droppable.ts @@ -39,18 +39,12 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< super.enable(); this.el.classList.remove('ui-droppable-disabled'); this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('dragover', this.dragOver); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); } disable() { if (this.disabled) { return; } super.disable(); this.el.classList.add('ui-droppable-disabled'); this.el.removeEventListener('dragenter', this.dragEnter); - this.el.removeEventListener('dragover', this.dragOver); - this.el.removeEventListener('drop', this.drop); - this.el.removeEventListener('dragleave', this.dragLeave); } updateOption(opts) { Object.keys(opts).forEach(key => { @@ -63,9 +57,9 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< protected init() { this.el.classList.add('ui-droppable'); this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('dragover', this.dragOver); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); + // this.el.addEventListener('dragover', this.dragOver); + // this.el.addEventListener('drop', this.drop); + // this.el.addEventListener('dragleave', this.dragLeave); this.setupAccept(); } @@ -80,15 +74,16 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< } this.triggerEvent('dropover', ev); event.preventDefault(); + this.el.addEventListener('dragover', this.dragOver); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); } } this.count++; } protected dragOver = (event: DragEvent) => { - if (this.canDrop()) { - event.preventDefault(); - event.stopPropagation(); - } + event.preventDefault(); + event.stopPropagation(); } protected dragLeave = (event: DragEvent) => { this.count--; @@ -99,6 +94,9 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< this.option.out(ev, this.ui(DDManager.dragElement)) } this.triggerEvent('dropout', ev); + this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); } event.preventDefault(); } From facb6acef1fbf50f59f12c8e727e34323f3f0fc9 Mon Sep 17 00:00:00 2001 From: rhlin Date: Thu, 29 Oct 2020 11:54:02 -0700 Subject: [PATCH 0309/1298] fix(h5dd): dragenter dragleave count nont right from https://github.com/rhlin/gridstack.js feat-h5dd-optimize --- src/dragdrop/dd-droppable.ts | 47 ++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts index 6bc63a506..57fd5b71c 100644 --- a/src/dragdrop/dd-droppable.ts +++ b/src/dragdrop/dd-droppable.ts @@ -39,12 +39,16 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< super.enable(); this.el.classList.remove('ui-droppable-disabled'); this.el.addEventListener('dragenter', this.dragEnter); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); } disable() { if (this.disabled) { return; } super.disable(); this.el.classList.add('ui-droppable-disabled'); this.el.removeEventListener('dragenter', this.dragEnter); + this.el.removeEventListener('drop', this.drop); + this.el.removeEventListener('dragleave', this.dragLeave); } updateOption(opts) { Object.keys(opts).forEach(key => { @@ -57,27 +61,22 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< protected init() { this.el.classList.add('ui-droppable'); this.el.addEventListener('dragenter', this.dragEnter); - // this.el.addEventListener('dragover', this.dragOver); - // this.el.addEventListener('drop', this.drop); - // this.el.addEventListener('dragleave', this.dragLeave); + this.el.addEventListener('drop', this.drop); + this.el.addEventListener('dragleave', this.dragLeave); this.setupAccept(); } protected dragEnter = (event: DragEvent) => { - if (this.canDrop()) { - if (0 === this.count) { - this.dragEl = DDManager.dragElement.el; - this.dragEl.addEventListener('dragend', this.resetCount); - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); - if (this.option.over) { - this.option.over(ev, this.ui(DDManager.dragElement)) - } - this.triggerEvent('dropover', ev); - event.preventDefault(); - this.el.addEventListener('dragover', this.dragOver); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); + if (0 === this.count && this.canDrop()) { + this.dragEl = DDManager.dragElement.el; + this.dragEl.addEventListener('dragend', this.resetCount); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); + if (this.option.over) { + this.option.over(ev, this.ui(DDManager.dragElement)) } + this.triggerEvent('dropover', ev); + this.el.addEventListener('dragover', this.dragOver); + event.preventDefault(); } this.count++; } @@ -87,17 +86,13 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< } protected dragLeave = (event: DragEvent) => { this.count--; - if (this.canDrop()) { - if (0 === this.count) { - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); - if (this.option.out) { - this.option.out(ev, this.ui(DDManager.dragElement)) - } - this.triggerEvent('dropout', ev); - this.el.removeEventListener('dragover', this.dragOver); - this.el.removeEventListener('drop', this.drop); - this.el.removeEventListener('dragleave', this.dragLeave); + if (0 === this.count && this.canDrop()) { + this.el.removeEventListener('dragover', this.dragOver); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); + if (this.option.out) { + this.option.out(ev, this.ui(DDManager.dragElement)) } + this.triggerEvent('dropout', ev); event.preventDefault(); } } From d4d6845fd59689696dcb4913f9532a0c2eb7f82c Mon Sep 17 00:00:00 2001 From: rhlin Date: Thu, 29 Oct 2020 11:54:27 -0700 Subject: [PATCH 0310/1298] feat(h5dd): optimization for dragenter dragleave, mouseover mouseout from https://github.com/rhlin/gridstack.js feat-h5dd-optimize --- src/dragdrop/dd-draggable.ts | 16 +- src/dragdrop/dd-droppable.ts | 63 +++++--- src/dragdrop/dd-resizable.ts | 281 +++++++++++++++++++++++++++++++++++ src/dragdrop/dd-utils.ts | 10 +- 4 files changed, 334 insertions(+), 36 deletions(-) create mode 100644 src/dragdrop/dd-resizable.ts diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts index 6793d2ab7..689224a77 100644 --- a/src/dragdrop/dd-draggable.ts +++ b/src/dragdrop/dd-draggable.ts @@ -11,7 +11,7 @@ import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; export interface DDDraggbleOpt { appendTo?: string | HTMLElement; - containment?: string | HTMLElement; + containment?: string | HTMLElement; // TODO: not impleament yet handle?: string; revert?: string | boolean | unknown; // TODO: not impleament yet scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually @@ -22,7 +22,7 @@ export interface DDDraggbleOpt { drag?: (event?, ui?) => void; }; export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt { - static basePosition: 'fixed'| 'absolute'= 'absolute'; + static basePosition: 'fixed' | 'absolute' = 'absolute'; static dragEventListinerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; static originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange']; @@ -195,8 +195,10 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.helper.style.position = this.option.basePosision || DDDraggble.basePosition; this.helper.style.zIndex = '1000'; setTimeout(() => { - this.helper.style.transition = null; // recover animation - }, 100); + if (this.helper) { + this.helper.style.transition = null; // recover animation + } + }, 0); } private removeHelperStyle() { @@ -213,10 +215,10 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.paintTimer = requestAnimationFrame(() => { this.paintTimer = undefined; const offset = this.dragOffset; - let containmentRect = {left: 0, top: 0}; + let containmentRect = { left: 0, top: 0 }; if (this.helper.style.position === 'absolute') { - const {left, top} = this.helperContainment.getBoundingClientRect(); - containmentRect = {left, top}; + const { left, top } = this.helperContainment.getBoundingClientRect(); + containmentRect = { left, top }; } this.helper.style.left = event.clientX + offset.offsetLeft - containmentRect.left + 'px'; this.helper.style.top = event.clientY + offset.offsetTop - containmentRect.top + 'px'; diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts index 57fd5b71c..dcf536335 100644 --- a/src/dragdrop/dd-droppable.ts +++ b/src/dragdrop/dd-droppable.ts @@ -20,8 +20,8 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< accept: (el: HTMLElement) => boolean; el: HTMLElement; option: DDDropableOpt; - private count = 0; - private dragEl: HTMLElement; + private acceptable: boolean = null; + private style; constructor(el: HTMLElement, opts: DDDropableOpt) { super(); this.el = el; @@ -39,16 +39,12 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< super.enable(); this.el.classList.remove('ui-droppable-disabled'); this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); } disable() { if (this.disabled) { return; } super.disable(); this.el.classList.add('ui-droppable-disabled'); this.el.removeEventListener('dragenter', this.dragEnter); - this.el.removeEventListener('drop', this.drop); - this.el.removeEventListener('dragleave', this.dragLeave); } updateOption(opts) { Object.keys(opts).forEach(key => { @@ -61,57 +57,66 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< protected init() { this.el.classList.add('ui-droppable'); this.el.addEventListener('dragenter', this.dragEnter); - this.el.addEventListener('drop', this.drop); - this.el.addEventListener('dragleave', this.dragLeave); + this.setupAccept(); + this.createStyleSheet(); } protected dragEnter = (event: DragEvent) => { - if (0 === this.count && this.canDrop()) { - this.dragEl = DDManager.dragElement.el; - this.dragEl.addEventListener('dragend', this.resetCount); + this.el.removeEventListener('dragenter', this.dragEnter); + this.acceptable = this.canDrop(); + if (this.acceptable) { + event.preventDefault(); const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); if (this.option.over) { this.option.over(ev, this.ui(DDManager.dragElement)) } this.triggerEvent('dropover', ev); this.el.addEventListener('dragover', this.dragOver); - event.preventDefault(); + this.el.addEventListener('drop', this.drop); } - this.count++; + this.el.classList.add('ui-droppable-over'); + this.el.addEventListener('dragleave', this.dragLeave); + } protected dragOver = (event: DragEvent) => { event.preventDefault(); event.stopPropagation(); } protected dragLeave = (event: DragEvent) => { - this.count--; - if (0 === this.count && this.canDrop()) { + if (this.el.contains(event.relatedTarget as HTMLElement)) { return; }; + this.el.removeEventListener('dragleave', this.dragLeave); + this.el.classList.remove('ui-droppable-over'); + if (this.acceptable) { + event.preventDefault(); this.el.removeEventListener('dragover', this.dragOver); + this.el.removeEventListener('drop', this.drop); const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); if (this.option.out) { this.option.out(ev, this.ui(DDManager.dragElement)) } this.triggerEvent('dropout', ev); - event.preventDefault(); } + this.el.addEventListener('dragenter', this.dragEnter); } + protected drop = (event: DragEvent) => { - if (this.canDrop()) { + if (this.acceptable) { + event.preventDefault(); const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); if (this.option.drop) { this.option.drop(ev, this.ui(DDManager.dragElement)) } this.triggerEvent('drop', ev); - event.preventDefault(); - this.count = 0; + this.dragLeave({ + ...ev, + relatedTarget: null, + preventDefault: () => { + // do nothing + } + }); } } - private resetCount = () => { - this.count = 0; - this.dragEl.removeEventListener('dragend', this.resetCount); - this.dragEl = undefined; - } private canDrop() { return DDManager.dragElement && (!this.accept || this.accept(DDManager.dragElement.el)); } @@ -125,6 +130,16 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< } } + private createStyleSheet() { + const content = `.ui-droppable.ui-droppable-over > *:not(.ui-droppable) {pointer-events: none;}`; + this.style = document.createElement('style'); + this.style.innerText = content; + this.el.appendChild(this.style); + } + private removeStyleSheet() { + this.el.removeChild(this.style); + } + destroy() { this.el.classList.remove('ui-droppable'); if (this.disabled) { diff --git a/src/dragdrop/dd-resizable.ts b/src/dragdrop/dd-resizable.ts new file mode 100644 index 000000000..30d726d02 --- /dev/null +++ b/src/dragdrop/dd-resizable.ts @@ -0,0 +1,281 @@ +// dd-resizable.ts 2.0.2-dev @preserve + +/** + * https://gridstackjs.com/ + * (c) 2020 Alain Dumesny, rhlin + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDResizableHandle } from './dd-resizable-handle'; +import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; +import { DDUtils } from './dd-utils'; +export interface DDResizableOpt { + autoHide?: boolean; + handles?: string; + maxHeight?: number; + maxWidth?: number; + minHeight?: number; + minWidth?: number; + basePosision?: 'fixed' | 'absolute'; + start?: (event: MouseEvent, ui) => void; + stop?: (event: MouseEvent, ui) => void; + resize?: (event: MouseEvent, ui) => void; +} +export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt { + static originStyleProp = ['width', 'height', 'position', 'left', 'top', 'opacity', 'zIndex']; + el: HTMLElement; + option: DDResizableOpt; + handlers: DDResizableHandle[]; + helper: HTMLElement; + originalRect; + temporalRect; + private startEvent: MouseEvent; + private elOriginStyle; + private parentOriginStylePosition; + constructor(el: HTMLElement, opts: DDResizableOpt) { + super(); + this.el = el; + this.option = opts || {}; + this.init(); + } + on(event: 'resizestart' | 'resize' | 'resizestop', callback: (event: DragEvent) => void): void { + super.on(event, callback); + } + off(event: 'resizestart' | 'resize' | 'resizestop') { + super.off(event); + } + enable() { + if (!this.disabled) { return; } + super.enable(); + this.el.classList.remove('ui-resizable-disabled'); + } + disable() { + if (this.disabled) { return; } + super.disable(); + this.el.classList.add('ui-resizable-disabled'); + } + updateOption(opts: DDResizableOpt) { + let updateHandles = false; + let updateAutoHide = false; + if (opts.handles !== this.option.handles) { + updateHandles = true; + } + if (opts.autoHide !== this.option.autoHide) { + updateAutoHide = true; + } + Object.keys(opts).forEach(key => { + const value = opts[key]; + this.option[key] = value; + }); + if (updateHandles) { + this.removeHandlers(); + this.setupHandlers(); + } + if (updateAutoHide) { + this.setupAutoHide(); + } + } + + protected init() { + this.el.classList.add('ui-resizable'); + this.setupAutoHide(); + this.setupHandlers(); + } + + protected setupAutoHide() { + if (this.option.autoHide) { + this.el.classList.add('ui-resizable-autohide'); + // use mouseover/mouseout instead of mouseenter mouseleave to get better performance; + this.el.addEventListener('mouseover', this.showHandlers); + this.el.addEventListener('mouseout', this.hideHandlers); + } else { + this.el.classList.remove('ui-resizable-autohide'); + this.el.removeEventListener('mouseover', this.showHandlers); + this.el.removeEventListener('mouseout', this.hideHandlers); + } + } + + protected showHandlers = () => { + this.el.classList.remove('ui-resizable-autohide'); + } + + protected hideHandlers = () => { + this.el.classList.add('ui-resizable-autohide'); + } + + protected setupHandlers() { + let handlerDirection = this.option.handles || 'e,s,se'; + if (handlerDirection === 'all') { + handlerDirection = 'n,e,s,w,se,sw,ne,nw'; + } + this.handlers = handlerDirection.split(',') + .map(dir => dir.trim()) + .map(dir => new DDResizableHandle(this.el, dir, { + start: (event: MouseEvent) => { + this.resizeStart(event); + }, + stop: (event: MouseEvent) => { + this.resizeStop(event); + }, + move: (event: MouseEvent) => { + this.resizing(event, dir); + } + })); + } + + protected resizeStart(event: MouseEvent) { + this.originalRect = this.el.getBoundingClientRect(); + this.startEvent = event; + this.setupHelper(); + this.applyChange(); + const ev = DDUtils.initEvent(event, { type: 'resizestart', target: this.el }); + if (this.option.start) { + this.option.start(ev, this.ui()); + } + this.triggerEvent('resizestart', ev); + } + + protected resizing(event: MouseEvent, dir: string) { + this.temporalRect = this.getChange(event, dir); + this.applyChange(); + const ev = DDUtils.initEvent(event, { type: 'resize', target: this.el }); + if (this.option.resize) { + this.option.resize(ev, this.ui()); + } + this.triggerEvent('resize', ev); + } + + protected resizeStop(event: MouseEvent) { + const ev = DDUtils.initEvent(event, { type: 'resizestop', target: this.el }); + if (this.option.stop) { + this.option.stop(ev, this.ui()); + } + this.triggerEvent('resizestop', ev); + this.cleanHelper(); + this.startEvent = undefined; + this.originalRect = undefined; + this.temporalRect = undefined; + } + + private setupHelper() { + this.elOriginStyle = DDResizable.originStyleProp.map(prop => this.el.style[prop]); + this.parentOriginStylePosition = this.el.parentElement.style.position; + if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) { + this.el.parentElement.style.position = 'relative'; + } + this.el.style.position = this.option.basePosision || 'absolute'; // or 'fixed' + this.el.style.opacity = '0.8'; + this.el.style.zIndex = '1000'; + } + private cleanHelper() { + DDResizable.originStyleProp.forEach(prop => { + this.el.style[prop] = this.elOriginStyle[prop] || null; + }); + this.el.parentElement.style.position = this.parentOriginStylePosition || null; + } + private getChange(event: MouseEvent, dir: string) { + const oEvent = this.startEvent; + const newRect = { + width: this.originalRect.width, + height: this.originalRect.height, + left: this.originalRect.left, + top: this.originalRect.top + }; + const offsetH = event.clientX - oEvent.clientX; + const offsetV = event.clientY - oEvent.clientY; + + if (dir.indexOf('e') > -1) { + newRect.width += event.clientX - oEvent.clientX; + } + if (dir.indexOf('s') > -1) { + newRect.height += event.clientY - oEvent.clientY; + } + if (dir.indexOf('w') > -1) { + newRect.width -= offsetH; + newRect.left += offsetH; + } + if (dir.indexOf('n') > -1) { + newRect.height -= offsetV; + newRect.top += offsetV + } + const reshape = this.getReShapeSize(newRect.width, newRect.height); + if (newRect.width !== reshape.width) { + if (dir.indexOf('w') > -1) { + newRect.left += reshape.width - newRect.width; + } + newRect.width = reshape.width; + } + if (newRect.height !== reshape.height) { + if (dir.indexOf('n') > -1) { + newRect.top += reshape.height - newRect.height; + } + newRect.height = reshape.height; + } + return newRect; + } + + private getReShapeSize(oWidth, oHeight) { + const maxWidth = this.option.maxWidth || oWidth; + const minWidth = this.option.minWidth || oWidth; + const maxHeight = this.option.maxHeight || oHeight; + const minHeight = this.option.minHeight || oHeight; + const width = Math.min(maxWidth, Math.max(minWidth, oWidth)); + const height = Math.min(maxHeight, Math.max(minHeight, oHeight)); + return { width, height }; + } + + private applyChange() { + let containmentRect = { left: 0, top: 0, width: 0, height: 0 }; + if (this.el.style.position === 'absolute') { + const containmentEl = this.el.parentElement; + const { left, top } = containmentEl.getBoundingClientRect(); + containmentRect = { left, top, width: 0, height: 0 }; + } + Object.keys(this.temporalRect || this.originalRect).forEach(key => { + const value = this.temporalRect[key]; + this.el.style[key] = value - containmentRect[key] + 'px'; + }); + } + + protected removeHandlers() { + this.handlers.forEach(handle => handle.destory()); + this.handlers = undefined; + } + + destory() { + this.removeHandlers(); + if (this.option.autoHide) { + this.el.removeEventListener('mouseover', this.showHandlers); + this.el.removeEventListener('mouseout', this.hideHandlers); + } + this.el.classList.remove('ui-resizable'); + this.el = undefined; + super.destroy(); + } + + ui = () => { + const containmentEl = this.el.parentElement; + const containmentRect = containmentEl.getBoundingClientRect(); + const rect = this.temporalRect || this.originalRect; + return { + element: [this.el], // The object representing the element to be resized + helper: [], // TODO: not support yet // The object representing the helper that's being resized + originalElement: [this.el],// we dont wrap here, so simplify as this.el //The object representing the original element before it is wrapped + originalPosition: { + left: this.originalRect.left - containmentRect.left, + top: this.originalRect.top - containmentRect.top + }, // The position represented as { left, top } before the resizable is resized + originalSize: { + width: this.originalRect.width, + height: this.originalRect.height + },// The size represented as { width, height } before the resizable is resized + position: { + left: rect.left - containmentRect.left, + top: rect.top - containmentRect.top + }, // The current position represented as { left, top } + size: { + width: rect.width, + height: rect.height + } // The current size represented as { width, height } + }; + } +} diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts index e4e8f7215..afc9c7bff 100644 --- a/src/dragdrop/dd-utils.ts +++ b/src/dragdrop/dd-utils.ts @@ -6,7 +6,7 @@ * gridstack.js may be freely distributed under the MIT license. */ export class DDUtils { - static isEventSupportPassiveOption = ((()=>{ + static isEventSupportPassiveOption = ((() => { let supportsPassive = false; let passiveTest = () => { // do nothing @@ -78,10 +78,10 @@ export class DDUtils { } } - static initEvent(e: DragEvent|MouseEvent, info: {type: string; target?: EventTarget}) { + static initEvent(e: DragEvent | MouseEvent, info: { type: string; target?: EventTarget }) { const kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(','); const ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(','); - const evt = {type: info.type}; + const evt = { type: info.type }; const obj = { button: 0, which: 0, @@ -89,10 +89,10 @@ export class DDUtils { bubbles: true, cancelable: true, originEvent: e, - target: info.target? info.target : e.target + target: info.target ? info.target : e.target } if (e instanceof DragEvent) { - Object.assign(obj, {dataTransfer: e.dataTransfer}); + Object.assign(obj, { dataTransfer: e.dataTransfer }); } DDUtils.copyProps(evt, e, kbdProps); DDUtils.copyProps(evt, e, ptProps); From d3785f336b8c1955700d782fa2ff395102e69bdc Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Thu, 29 Oct 2020 12:06:34 -0700 Subject: [PATCH 0311/1298] sample h5 demos still way too slow for html5 vs mouse event JQ. Will have to roll our own. --- demo/two-h5.html | 124 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 demo/two-h5.html diff --git a/demo/two-h5.html b/demo/two-h5.html new file mode 100644 index 000000000..25a259473 --- /dev/null +++ b/demo/two-h5.html @@ -0,0 +1,124 @@ + + + + + + + Two grids demo + + + + + + + + + + +
    +

    Two grids demo

    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + + + From 44fa7c127c37c79bbf4ed10a13247333cccdc9ff Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 1 Nov 2020 20:58:26 -0800 Subject: [PATCH 0312/1298] H5: fixed resizing performance * make sure to add .ui-resizable-resizing class while resizing, else we fall into CSS 300ms animation (grid default to animate) resize is now fast like dragging * removed drag/resize delay timeout - not needed and Util has routine anyway if we decide later * fixed typos throughout H5 code * changed credit order to give credit where credit is due (rhlin) --- src/dragdrop/dd-base-impl.ts | 41 +++++++++ src/dragdrop/dd-draggable.ts | 47 +++++----- src/dragdrop/dd-droppable.ts | 19 ++-- src/dragdrop/dd-element.ts | 92 +++++++++++++++++++ src/dragdrop/dd-manager.ts | 10 ++ src/dragdrop/dd-resizable-handle.ts | 105 +++++++++++++++++++++ src/dragdrop/dd-resizable.ts | 17 ++-- src/dragdrop/dd-utils.ts | 14 +-- src/dragdrop/gridstack-dd-native.ts | 137 ++++++++++++++++++++++++++++ src/utils.ts | 2 +- 10 files changed, 427 insertions(+), 57 deletions(-) create mode 100644 src/dragdrop/dd-base-impl.ts create mode 100644 src/dragdrop/dd-element.ts create mode 100644 src/dragdrop/dd-manager.ts create mode 100644 src/dragdrop/dd-resizable-handle.ts create mode 100644 src/dragdrop/gridstack-dd-native.ts diff --git a/src/dragdrop/dd-base-impl.ts b/src/dragdrop/dd-base-impl.ts new file mode 100644 index 000000000..9dee8c590 --- /dev/null +++ b/src/dragdrop/dd-base-impl.ts @@ -0,0 +1,41 @@ +// dd-base-impl.ts 2.0.2-dev @preserve +/** + * https://gridstackjs.com/ + * (c) 2020 rhlin, Alain Dumesny + * gridstack.js may be freely distributed under the MIT license. +*/ +export type EventCallback = (event: Event) => boolean|void; +export abstract class DDBaseImplement { + disabled = false; + private eventRegister: { + [eventName: string]: EventCallback; + } = {}; + on(event: string, callback: EventCallback): void { + this.eventRegister[event] = callback; + } + off(event: string) { + delete this.eventRegister[event]; + } + enable(): void { + this.disabled = false; + } + disable(): void { + this.disabled = true; + } + destroy() { + this.eventRegister = undefined; + } + triggerEvent(eventName: string, event: Event): boolean|void { + if (this.disabled) { return; } + if (!this.eventRegister) {return; } // used when destroy before triggerEvent fire + if (this.eventRegister[eventName]) { + return this.eventRegister[eventName](event); + } + } +} + +export interface HTMLElementExtendOpt { + el: HTMLElement; + option: T; + updateOption(T): void; +} diff --git a/src/dragdrop/dd-draggable.ts b/src/dragdrop/dd-draggable.ts index 689224a77..481c50b64 100644 --- a/src/dragdrop/dd-draggable.ts +++ b/src/dragdrop/dd-draggable.ts @@ -1,34 +1,33 @@ // dd-draggable.ts 2.0.2-dev @preserve - /** * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin + * (c) 2020 rhlin, Alain Dumesny * gridstack.js may be freely distributed under the MIT license. */ import { DDManager } from './dd-manager'; import { DDUtils } from './dd-utils'; import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; -export interface DDDraggbleOpt { +export interface DDDraggableOpt { appendTo?: string | HTMLElement; - containment?: string | HTMLElement; // TODO: not impleament yet + containment?: string | HTMLElement; // TODO: not implemented yet handle?: string; - revert?: string | boolean | unknown; // TODO: not impleament yet + revert?: string | boolean | unknown; // TODO: not implemented yet scroll?: boolean; // nature support by HTML5 drag drop, can't be switch to off actually helper?: string | ((event: Event) => HTMLElement); - basePosision?: 'fixed' | 'absolute'; + basePosition?: 'fixed' | 'absolute'; start?: (event?, ui?) => void; stop?: (event?, ui?) => void; drag?: (event?, ui?) => void; }; -export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt { +export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt { static basePosition: 'fixed' | 'absolute' = 'absolute'; - static dragEventListinerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; + static dragEventListenerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; static originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange']; el: HTMLElement; helper: HTMLElement; - option: DDDraggbleOpt; + option: DDDraggableOpt; dragOffset: { left: number; top: number; @@ -45,7 +44,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< parentOriginStylePosition: string; helperContainment: HTMLElement; - constructor(el: HTMLElement, option: DDDraggbleOpt) { + constructor(el: HTMLElement, option: DDDraggableOpt) { super(); this.el = el; this.option = option || {}; @@ -84,7 +83,6 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.el.classList.add('ui-draggable'); this.el.addEventListener('mousedown', this.mouseDown); this.el.addEventListener('dragstart', this.dragStart); - this.dragThrottle = DDUtils.throttle(this.drag, 100); } protected mouseDown = (event: MouseEvent) => { @@ -119,17 +117,16 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< protected setupDragFollowNodeNNotifyStart(ev) { this.setupHelperStyle(); - document.addEventListener('dragover', this.dragThrottle, DDDraggble.dragEventListinerOption); + document.addEventListener('dragover', this.drag, DDDraggable.dragEventListenerOption); this.el.addEventListener('dragend', this.dragEnd); if (this.option.start) { this.option.start(ev, this.ui()); } - this.triggerEvent('dragstart', ev); this.dragging = true; this.helper.classList.add('ui-draggable-dragging'); + this.triggerEvent('dragstart', ev); } - protected dragThrottle: (event: DragEvent) => void; protected drag = (event: DragEvent) => { this.dragFollow(event); const ev = DDUtils.initEvent(event, { target: this.el, type: 'drag' }); @@ -148,7 +145,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< if (this.paintTimer) { cancelAnimationFrame(this.paintTimer); } - document.removeEventListener('dragover', this.dragThrottle, DDDraggble.dragEventListinerOption); + document.removeEventListener('dragover', this.drag, DDDraggable.dragEventListenerOption); this.el.removeEventListener('dragend', this.dragEnd); } this.dragging = false; @@ -181,7 +178,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< : this.option.appendTo)); } if (helper === this.el) { - this.dragElementOriginStyle = DDDraggble.originStyleProp.map(prop => this.el.style[prop]); + this.dragElementOriginStyle = DDDraggable.originStyleProp.map(prop => this.el.style[prop]); } return helper; } @@ -191,8 +188,8 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< this.helper.style.width = this.dragOffset.width + 'px'; this.helper.style.height = this.dragOffset.height + 'px'; this.helper.style['willChange'] = 'left, top'; - this.helper.style.transition = 'none'; // show up instancely - this.helper.style.position = this.option.basePosision || DDDraggble.basePosition; + this.helper.style.transition = 'none'; // show up instantly + this.helper.style.position = this.option.basePosition || DDDraggable.basePosition; this.helper.style.zIndex = '1000'; setTimeout(() => { if (this.helper) { @@ -202,7 +199,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< } private removeHelperStyle() { - DDDraggble.originStyleProp.forEach(prop => { + DDDraggable.originStyleProp.forEach(prop => { this.helper.style[prop] = this.dragElementOriginStyle[prop] || null; }); this.dragElementOriginStyle = undefined; @@ -227,7 +224,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< private setupHelperContainmentStyle() { this.helperContainment = this.helper.parentElement; - if (this.option.basePosision !== 'fixed') { + if (this.option.basePosition !== 'fixed') { this.parentOriginStylePosition = this.helperContainment.style.position; if (window.getComputedStyle(this.helperContainment).position.match(/static/)) { this.helperContainment.style.position = 'relative'; @@ -255,7 +252,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< } private getDragOffset(event: DragEvent, el: HTMLElement, attachedParent: HTMLElement) { - // in case ancestor has transform/perspective css properies that change the viewpoint + // in case ancestor has transform/perspective css properties that change the viewpoint const getViewPointFromParent = (parent) => { if (!parent) { return null; } const testEl = document.createElement('div'); @@ -293,9 +290,9 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< } destroy() { if (this.dragging) { - // Destroy while draggging should remove dragend listener and manally trigger - // dragend, otherwise dragEnd can't perform dragstop becasue eventResistry is - // destoryed. + // Destroy while dragging should remove dragend listener and manually trigger + // dragend, otherwise dragEnd can't perform dragstop because eventRegistry is + // destroyed. this.dragEnd({} as DragEvent); } this.el.draggable = false; @@ -317,7 +314,7 @@ export class DDDraggble extends DDBaseImplement implements HTMLElementExtendOpt< top: offset.top - containmentRect.top, left: offset.left - containmentRect.left }, //Current CSS position of the helper as { top, left } object - offset: { top: offset.top, left: offset.left }// Current offset position of the helper as { top, left } object. + offset: { top: offset.top, left: offset.left } // Current offset position of the helper as { top, left } object. }; } } diff --git a/src/dragdrop/dd-droppable.ts b/src/dragdrop/dd-droppable.ts index dcf536335..8cf7ba725 100644 --- a/src/dragdrop/dd-droppable.ts +++ b/src/dragdrop/dd-droppable.ts @@ -1,28 +1,27 @@ // dd-droppable.ts 2.0.2-dev @preserve - /** * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin + * (c) 2020 rhlin, Alain Dumesny * gridstack.js may be freely distributed under the MIT license. */ -import { DDDraggble } from './dd-draggable'; +import { DDDraggable } from './dd-draggable'; import { DDManager } from './dd-manager'; import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; import { DDUtils } from './dd-utils'; -export interface DDDropableOpt { +export interface DDDroppableOpt { accept?: string | ((el: HTMLElement) => boolean); drop?: (event: DragEvent, ui) => void; over?: (event: DragEvent, ui) => void; out?: (event: DragEvent, ui) => void; }; -export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt { +export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt { accept: (el: HTMLElement) => boolean; el: HTMLElement; - option: DDDropableOpt; + option: DDDroppableOpt; private acceptable: boolean = null; private style; - constructor(el: HTMLElement, opts: DDDropableOpt) { + constructor(el: HTMLElement, opts: DDDroppableOpt) { super(); this.el = el; this.option = opts || {}; @@ -152,10 +151,10 @@ export class DDDropable extends DDBaseImplement implements HTMLElementExtendOpt< super.destroy(); } - ui(ddDraggble: DDDraggble) { + ui(DDDraggable: DDDraggable) { return { - draggable: ddDraggble.el, - ...ddDraggble.ui() + draggable: DDDraggable.el, + ...DDDraggable.ui() }; } } diff --git a/src/dragdrop/dd-element.ts b/src/dragdrop/dd-element.ts new file mode 100644 index 000000000..b730b4e63 --- /dev/null +++ b/src/dragdrop/dd-element.ts @@ -0,0 +1,92 @@ +// dd-elements.ts 2.0.2-dev @preserve +/** + * https://gridstackjs.com/ + * (c) 2020 rhlin, Alain Dumesny + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDResizable, DDResizableOpt } from './dd-resizable'; +import { GridItemHTMLElement } from './../types'; +import { DDDraggable, DDDraggableOpt } from './dd-draggable'; +import { DDDroppable, DDDroppableOpt } from './dd-droppable'; +export interface DDElementHost extends GridItemHTMLElement { + ddElement?: DDElement; +} +export class DDElement { + static init(el) { + el.ddElement = new DDElement(el); + return el.ddElement; + } + el: DDElementHost; + ddDraggable?: DDDraggable; + ddDroppable?: DDDroppable; + ddResizable?: DDResizable; + constructor(el: DDElementHost) { + this.el = el; + } + on(eventName: string, callback: (event: MouseEvent) => void) { + if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { + this.ddDraggable.on(eventName as 'drag' | 'dragstart' | 'dragstop', callback); + return; + } + if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { + this.ddDroppable.on(eventName as 'drop' | 'dropover' | 'dropout', callback); + return; + } + if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { + this.ddResizable.on(eventName as 'resizestart' | 'resize' | 'resizestop', callback); + return; + } + return; + } + off(eventName: string) { + if (this.ddDraggable && ['drag', 'dragstart', 'dragstop'].indexOf(eventName) > -1) { + this.ddDraggable.off(eventName as 'drag' | 'dragstart' | 'dragstop'); + return; + } + if (this.ddDroppable && ['drop', 'dropover', 'dropout'].indexOf(eventName) > -1) { + this.ddDroppable.off(eventName as 'drop' | 'dropover' | 'dropout'); + return; + } + if (this.ddResizable && ['resizestart', 'resize', 'resizestop'].indexOf(eventName) > -1) { + this.ddResizable.off(eventName as 'resizestart' | 'resize' | 'resizestop'); + return; + } + return; + } + setupDraggable(opts: DDDraggableOpt) { + if (!this.ddDraggable) { + this.ddDraggable = new DDDraggable(this.el, opts); + } else { + this.ddDraggable.updateOption(opts); + } + } + setupResizable(opts: DDResizableOpt) { + if (!this.ddResizable) { + this.ddResizable = new DDResizable(this.el, opts); + } else { + this.ddResizable.updateOption(opts); + } + } + cleanDraggable() { + if (!this.ddDraggable) { return; } + this.ddDraggable.destroy(); + this.ddDraggable = undefined; + } + setupDroppable(opts: DDDroppableOpt) { + if (!this.ddDroppable) { + this.ddDroppable = new DDDroppable(this.el, opts); + } else { + this.ddDroppable.updateOption(opts); + } + } + cleanDroppable() { + if (!this.ddDroppable) { return; } + this.ddDroppable.destroy(); + this.ddDroppable = undefined; + } + cleanResizable() { + if (!this.cleanResizable) { return; } + this.ddResizable.destroy(); + this.ddResizable = undefined; + } +} diff --git a/src/dragdrop/dd-manager.ts b/src/dragdrop/dd-manager.ts new file mode 100644 index 000000000..a97a92344 --- /dev/null +++ b/src/dragdrop/dd-manager.ts @@ -0,0 +1,10 @@ +// dd-manager.ts 2.0.2-dev @preserve +/** + * https://gridstackjs.com/ + * (c) 2020 rhlin, Alain Dumesny + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDDraggable } from './dd-draggable'; +export class DDManager { + static dragElement: DDDraggable; +} diff --git a/src/dragdrop/dd-resizable-handle.ts b/src/dragdrop/dd-resizable-handle.ts new file mode 100644 index 000000000..b99f3cc67 --- /dev/null +++ b/src/dragdrop/dd-resizable-handle.ts @@ -0,0 +1,105 @@ +// dd-resizable-handle.ts 2.0.2-dev @preserve +/** + * https://gridstackjs.com/ + * (c) 2020 rhlin, Alain Dumesny + * gridstack.js may be freely distributed under the MIT license. +*/ +export interface DDResizableHandleOpt { + start?: (event) => void; + move?: (event) => void; + stop?: (event) => void; +} +export class DDResizableHandle { + static prefix = 'ui-resizable-'; + el: HTMLElement; + host: HTMLElement; + option: DDResizableHandleOpt; + dir: string; + private mouseMoving = false; + private started = false; + private mouseDownEvent: MouseEvent; + constructor(host: HTMLElement, direction: string, option: DDResizableHandleOpt) { + this.host = host; + this.dir = direction; + this.option = option; + this.init(); + } + + init() { + const el = document.createElement('div'); + el.classList.add('ui-resizable-handle'); + el.classList.add(`${DDResizableHandle.prefix}${this.dir}`); + el.style.zIndex = '100'; + el.style.userSelect = 'none'; + this.el = el; + this.host.appendChild(this.el); + this.el.addEventListener('mousedown', this.mouseDown); + } + + protected mouseDown = (event: MouseEvent) => { + this.mouseDownEvent = event; + setTimeout(() => { + document.addEventListener('mousemove', this.mouseMove, true); + document.addEventListener('mouseup', this.mouseUp); + setTimeout(() => { + if (!this.mouseMoving) { + document.removeEventListener('mousemove', this.mouseMove, true); + document.removeEventListener('mouseup', this.mouseUp); + this.mouseDownEvent = undefined; + } + }, 300); + }, 100); + } + + protected mouseMove = (event: MouseEvent) => { + if (!this.started && !this.mouseMoving) { + if (this.hasMoved(event, this.mouseDownEvent)) { + this.mouseMoving = true; + this.triggerEvent('start', this.mouseDownEvent); + this.started = true; + } + } + if (this.started) { + this.triggerEvent('move', event); + } + } + + protected mouseUp = (event: MouseEvent) => { + if (this.mouseMoving) { + this.triggerEvent('stop', event); + } + document.removeEventListener('mousemove', this.mouseMove, true); + document.removeEventListener('mouseup', this.mouseUp); + this.mouseMoving = false; + this.started = false; + this.mouseDownEvent = undefined; + } + + private hasMoved(event: MouseEvent, oEvent: MouseEvent) { + const { clientX, clientY } = event; + const { clientX: oClientX, clientY: oClientY } = oEvent; + return ( + Math.abs(clientX - oClientX) > 1 + || Math.abs(clientY - oClientY) > 1 + ); + } + + show() { + this.el.style.display = 'block'; + } + + hide() { + this.el.style.display = 'none'; + } + + destroy() { + this.host.removeChild(this.el); + } + + triggerEvent(name: string, event: MouseEvent) { + if (this.option[name]) { + this.option[name](event); + } + } + +} diff --git a/src/dragdrop/dd-resizable.ts b/src/dragdrop/dd-resizable.ts index 30d726d02..6d29733ee 100644 --- a/src/dragdrop/dd-resizable.ts +++ b/src/dragdrop/dd-resizable.ts @@ -1,8 +1,7 @@ // dd-resizable.ts 2.0.2-dev @preserve - /** * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin + * (c) 2020 rhlin, Alain Dumesny * gridstack.js may be freely distributed under the MIT license. */ import { DDResizableHandle } from './dd-resizable-handle'; @@ -15,7 +14,7 @@ export interface DDResizableOpt { maxWidth?: number; minHeight?: number; minWidth?: number; - basePosision?: 'fixed' | 'absolute'; + basePosition?: 'fixed' | 'absolute'; start?: (event: MouseEvent, ui) => void; stop?: (event: MouseEvent, ui) => void; resize?: (event: MouseEvent, ui) => void; @@ -131,6 +130,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt if (this.option.start) { this.option.start(ev, this.ui()); } + this.el.classList.add('ui-resizable-resizing'); this.triggerEvent('resizestart', ev); } @@ -149,6 +149,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt if (this.option.stop) { this.option.stop(ev, this.ui()); } + this.el.classList.remove('ui-resizable-resizing'); this.triggerEvent('resizestop', ev); this.cleanHelper(); this.startEvent = undefined; @@ -162,7 +163,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) { this.el.parentElement.style.position = 'relative'; } - this.el.style.position = this.option.basePosision || 'absolute'; // or 'fixed' + this.el.style.position = this.option.basePosition || 'absolute'; // or 'fixed' this.el.style.opacity = '0.8'; this.el.style.zIndex = '1000'; } @@ -237,11 +238,11 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt } protected removeHandlers() { - this.handlers.forEach(handle => handle.destory()); + this.handlers.forEach(handle => handle.destroy()); this.handlers = undefined; } - destory() { + destroy() { this.removeHandlers(); if (this.option.autoHide) { this.el.removeEventListener('mouseover', this.showHandlers); @@ -258,8 +259,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt const rect = this.temporalRect || this.originalRect; return { element: [this.el], // The object representing the element to be resized - helper: [], // TODO: not support yet // The object representing the helper that's being resized - originalElement: [this.el],// we dont wrap here, so simplify as this.el //The object representing the original element before it is wrapped + helper: [], // TODO: not support yet - The object representing the helper that's being resized + originalElement: [this.el],// we don't wrap here, so simplify as this.el //The object representing the original element before it is wrapped originalPosition: { left: this.originalRect.left - containmentRect.left, top: this.originalRect.top - containmentRect.top diff --git a/src/dragdrop/dd-utils.ts b/src/dragdrop/dd-utils.ts index afc9c7bff..819384b8b 100644 --- a/src/dragdrop/dd-utils.ts +++ b/src/dragdrop/dd-utils.ts @@ -1,8 +1,7 @@ // dd-utils.ts 2.0.2-dev @preserve - /** * https://gridstackjs.com/ - * (c) 2020 Alain Dumesny, rhlin + * (c) 2020 rhlin, Alain Dumesny * gridstack.js may be freely distributed under the MIT license. */ export class DDUtils { @@ -44,17 +43,6 @@ export class DDUtils { } } - static throttle(callback: (...args) => void, delay: number) { - let isWaiting = false; - - return (...args) => { - if (!isWaiting) { - callback(...args); - isWaiting = true; - setTimeout(() => isWaiting = false, delay); - } - } - } static addElStyles(el: HTMLElement, styles: { [prop: string]: string | string[] }) { if (styles instanceof Object) { for (const s in styles) { diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/dragdrop/gridstack-dd-native.ts new file mode 100644 index 000000000..faabe2870 --- /dev/null +++ b/src/dragdrop/gridstack-dd-native.ts @@ -0,0 +1,137 @@ +// gridstack-dd-native.ts 2.0.2-dev @preserve +/** + * https://gridstackjs.com/ + * (c) 2020 rhlin, Alain Dumesny + * gridstack.js may be freely distributed under the MIT license. +*/ +import { DDManager } from './dd-manager'; +import { DDElement } from './dd-element'; + +import { GridStack, GridStackElement } from '../gridstack'; +import { GridStackDD, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dd'; +import { GridItemHTMLElement, DDDragInOpt } from '../types'; + +/** + * HTML 5 Native DragDrop based drag'n'drop plugin. + */ +export class GridStackDDNative extends GridStackDD { + public constructor(grid: GridStack) { + super(grid); + } + + public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + if (opts === 'disable' || opts === 'enable') { + dEl.ddResizable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddResizable) { + dEl.cleanResizable(); + } + } else if (opts === 'option') { + dEl.setupResizable({ [key]: value }); + } else { + let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : this.grid.opts.resizable.handles; + dEl.setupResizable({ + ...this.grid.opts.resizable, + ...{ handles: handles }, + ...{ + start: opts.start, + stop: opts.stop, + resize: opts.resize + } + }); + } + return this; + } + + public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { + const dEl = this.getGridStackDDElement(el); + if (opts === 'disable' || opts === 'enable') { + dEl.ddDraggable && dEl.ddDraggable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDraggable) { // error to call destroy if not there + dEl.cleanDraggable(); + } + } else if (opts === 'option') { + dEl.setupDraggable({ [key]: value }); + } else { + dEl.setupDraggable({ + ...this.grid.opts.draggable, + ...{ + containment: (this.grid.opts._isNested && !this.grid.opts.dragOut) + ? this.grid.el.parentElement + : (this.grid.opts.draggable.containment || null), + start: opts.start, + stop: opts.stop, + drag: opts.drag + } + }); + } + return this; + } + + public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + dEl.setupDraggable(opts); + return this; + } + + public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + if (typeof opts.accept === 'function' && !opts._accept) { + opts._accept = opts.accept; + opts.accept = (el) => opts._accept(el); + } + if (opts === 'disable' || opts === 'enable') { + dEl.ddDroppable && dEl.ddDroppable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDroppable) { // error to call destroy if not there + dEl.cleanDroppable(); + } + } else if (opts === 'option') { + dEl.setupDroppable({ [key]: value }); + } else { + dEl.setupDroppable(opts); + } + return this; + } + + public isDroppable(el: GridItemHTMLElement): boolean { + const dEl = this.getGridStackDDElement(el); + return !!(dEl.ddDroppable); + } + + public isDraggable(el: GridStackElement): boolean { + const dEl = this.getGridStackDDElement(el); + return !!(dEl.ddDraggable); + } + + public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDDNative { + let dEl = this.getGridStackDDElement(el); + dEl.on(name, (event: Event) => { + callback( + event, + DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement, + DDManager.dragElement ? DDManager.dragElement.helper : null) + }); + return this; + } + + public off(el: GridItemHTMLElement, name: string): GridStackDD { + let dEl = this.getGridStackDDElement(el); + dEl.off(name); + return this; + } + private getGridStackDDElement(el: GridStackElement): DDElement { + let dEl; + if (typeof el === 'string') { + dEl = document.querySelector(el as string); + } else { + dEl = el; + } + return dEl.ddElement ? dEl.ddElement: DDElement.init(dEl); + } +} + +// finally register ourself +GridStackDD.registerPlugin(GridStackDDNative); diff --git a/src/utils.ts b/src/utils.ts index a34d2d42c..4eecb6010 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -187,7 +187,7 @@ export class Utils { return Utils.closestByClass(el, name); } - /** @internal */ + /** delay calling the given function by certain amount of time */ static throttle(callback: () => void, delay: number): () => void { let isWaiting = false; From ed058d90f88526cab77377a76c2ddca58bc03ef0 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 15 Nov 2020 07:40:59 -0800 Subject: [PATCH 0313/1298] h5: rebase to develop 2.2.0 branch --- demo/two-h5.html | 2 +- src/dragdrop/dd-base-impl.ts | 3 ++- src/dragdrop/dd-draggable.ts | 5 +++-- src/dragdrop/dd-droppable.ts | 3 ++- src/dragdrop/dd-element.ts | 3 ++- src/dragdrop/dd-manager.ts | 3 ++- src/dragdrop/dd-resizable-handle.ts | 3 ++- src/dragdrop/dd-resizable.ts | 3 ++- src/dragdrop/dd-utils.ts | 3 ++- src/dragdrop/gridstack-dd-native.ts | 3 ++- src/gridstack.ts | 3 --- src/index-h5.ts | 13 +++++++++++++ src/index-jq.ts | 13 +++++++++++++ src/index-static.ts | 11 +++++++++++ webpack.config.js | 7 +++---- 15 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 src/index-h5.ts create mode 100644 src/index-jq.ts create mode 100644 src/index-static.ts diff --git a/demo/two-h5.html b/demo/two-h5.html index 25a259473..b4f3c8fe9 100644 --- a/demo/two-h5.html +++ b/demo/two-h5.html @@ -10,7 +10,7 @@ - + + + + +

    Advanced Demo

    +
    +
    +
    +
    + +
    +
    + Drop here to remove! +
    +
    +
    +
    +
    + +
    +
    + Drag me in the dashboard! +
    +
    +
    +
    +
    +
    +
    +
    + + + + + \ No newline at end of file diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/dragdrop/gridstack-dd-native.ts index 4ccc97a36..26af54821 100644 --- a/src/dragdrop/gridstack-dd-native.ts +++ b/src/dragdrop/gridstack-dd-native.ts @@ -6,11 +6,12 @@ * gridstack.js may be freely distributed under the MIT license. */ import { DDManager } from './dd-manager'; -import { DDElement } from './dd-element'; +import { DDElement, DDElementHost } from './dd-element'; import { GridStackElement } from '../gridstack'; import { GridStackDD, DDOpts, DDKey, DDDropOpt, DDCallback, DDValue } from '../gridstack-dd'; import { GridItemHTMLElement, DDDragInOpt } from '../types'; +import { Utils } from '../utils'; /** * HTML 5 Native DragDrop based drag'n'drop plugin. @@ -18,119 +19,117 @@ import { GridItemHTMLElement, DDDragInOpt } from '../types'; export class GridStackDDNative extends GridStackDD { public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - if (opts === 'disable' || opts === 'enable') { - dEl.ddResizable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddResizable) { - dEl.cleanResizable(); - } - } else if (opts === 'option') { - dEl.setupResizable({ [key]: value }); - } else { - const grid = el.gridstackNode.grid; - let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : grid.opts.resizable.handles; - dEl.setupResizable({ - ...grid.opts.resizable, - ...{ handles: handles }, - ...{ - start: opts.start, - stop: opts.stop, - resize: opts.resize + this.getDDElements(el).forEach(dEl => { + if (opts === 'disable' || opts === 'enable') { + dEl.ddResizable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddResizable) { + dEl.cleanResizable(); } - }); - } + } else if (opts === 'option') { + dEl.setupResizable({ [key]: value }); + } else { + const grid = dEl.el.gridstackNode.grid; + let handles = dEl.el.getAttribute('gs-resize-handles') ? dEl.el.getAttribute('gs-resize-handles') : grid.opts.resizable.handles; + dEl.setupResizable({ + ...grid.opts.resizable, + ...{ handles: handles }, + ...{ + start: opts.start, + stop: opts.stop, + resize: opts.resize + } + }); + } + }); return this; } public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDDNative { - const dEl = this.getGridStackDDElement(el); - if (opts === 'disable' || opts === 'enable') { - dEl.ddDraggable && dEl.ddDraggable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddDraggable) { // error to call destroy if not there - dEl.cleanDraggable(); - } - } else if (opts === 'option') { - dEl.setupDraggable({ [key]: value }); - } else { - const grid = el.gridstackNode.grid; - dEl.setupDraggable({ - ...grid.opts.draggable, - ...{ - containment: (grid.opts._isNested && !grid.opts.dragOut) - ? grid.el.parentElement - : (grid.opts.draggable.containment || null), - start: opts.start, - stop: opts.stop, - drag: opts.drag + this.getDDElements(el).forEach(dEl => { + if (opts === 'disable' || opts === 'enable') { + dEl.ddDraggable && dEl.ddDraggable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDraggable) { // error to call destroy if not there + dEl.cleanDraggable(); } - }); - } + } else if (opts === 'option') { + dEl.setupDraggable({ [key]: value }); + } else { + const grid = dEl.el.gridstackNode.grid; + dEl.setupDraggable({ + ...grid.opts.draggable, + ...{ + containment: (grid.opts._isNested && !grid.opts.dragOut) + ? grid.el.parentElement + : (grid.opts.draggable.containment || null), + start: opts.start, + stop: opts.stop, + drag: opts.drag + } + }); + } + }); return this; } public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - dEl.setupDraggable(opts); + this.getDDElements(el).forEach(dEl => dEl.setupDraggable(opts)); return this; } public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); if (typeof opts.accept === 'function' && !opts._accept) { opts._accept = opts.accept; opts.accept = (el) => opts._accept(el); } - if (opts === 'disable' || opts === 'enable') { - dEl.ddDroppable && dEl.ddDroppable[opts](); - } else if (opts === 'destroy') { - if (dEl.ddDroppable) { // error to call destroy if not there - dEl.cleanDroppable(); + this.getDDElements(el).forEach(dEl => { + if (opts === 'disable' || opts === 'enable') { + dEl.ddDroppable && dEl.ddDroppable[opts](); + } else if (opts === 'destroy') { + if (dEl.ddDroppable) { // error to call destroy if not there + dEl.cleanDroppable(); + } + } else if (opts === 'option') { + dEl.setupDroppable({ [key]: value }); + } else { + dEl.setupDroppable(opts); } - } else if (opts === 'option') { - dEl.setupDroppable({ [key]: value }); - } else { - dEl.setupDroppable(opts); - } + }); return this; } + /** true if at least one of them is droppable */ public isDroppable(el: GridItemHTMLElement): boolean { - const dEl = this.getGridStackDDElement(el); - return !!(dEl.ddDroppable); + return this.getDDElements(el).some(dEl => !!(dEl.ddDroppable)); } + /** true if at least one of them is draggable */ public isDraggable(el: GridStackElement): boolean { - const dEl = this.getGridStackDDElement(el); - return !!(dEl.ddDraggable); + return this.getDDElements(el).some(dEl => !!(dEl.ddDraggable)); } public on(el: GridItemHTMLElement, name: string, callback: DDCallback): GridStackDDNative { - let dEl = this.getGridStackDDElement(el); - dEl.on(name, (event: Event) => { - callback( - event, - DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement, - DDManager.dragElement ? DDManager.dragElement.helper : null) - }); + this.getDDElements(el).forEach(dEl => + dEl.on(name, (event: Event) => { + callback( + event, + DDManager.dragElement ? DDManager.dragElement.el : event.target as GridItemHTMLElement, + DDManager.dragElement ? DDManager.dragElement.helper : null) + }) + ); return this; } public off(el: GridItemHTMLElement, name: string): GridStackDD { - let dEl = this.getGridStackDDElement(el); - dEl.off(name); + this.getDDElements(el).forEach(dEl => dEl.off(name)); return this; } - private getGridStackDDElement(el: GridStackElement): DDElement { - let dEl; - if (typeof el === 'string') { - dEl = document.querySelector(el as string); - } else { - dEl = el; - } - return dEl.ddElement ? dEl.ddElement: DDElement.init(dEl); + private getDDElements(els: GridStackElement): DDElement[] { + let list = Utils.getElements(els) as DDElementHost[]; + if (!list.length) { return []; } + return list.map(e => e.ddElement || DDElement.init(e)); } } diff --git a/src/gridstack.ts b/src/gridstack.ts index e5d70b281..7120662f2 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,7 +8,7 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils, HeightData } from './utils'; -import { GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, ColumnOptions, DDUIData } from './types'; +import { GridStackElement, GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, ColumnOptions, DDUIData } from './types'; import { GridStackDD } from './gridstack-dd'; // export all dependent file as well to make it easier for users to just import the main file @@ -17,8 +17,6 @@ export * from './utils'; export * from './gridstack-engine'; export * from './gridstack-dd'; -export type GridStackElement = string | HTMLElement | GridItemHTMLElement; - export interface GridHTMLElement extends HTMLElement { gridstack?: GridStack; // grid's parent DOM element points back to grid class } @@ -1766,48 +1764,19 @@ export class GridStack { /** @internal convert a potential selector into actual element */ private static getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { - if (typeof els === 'string') { - if (!els.length) { return null} - if (els[0] === '#') { - return document.getElementById(els.substring(1)); - } - if (els[0] === '.') { - return document.querySelector(els); - } - - // if we start with a digit, assume it's an id (error calling querySelector('#1')) as class are not valid CSS - if(!isNaN(+els[0])) { // start with digit - return document.getElementById(els); - } - - // finally try string, then id then class - let el = document.querySelector(els); - if (!el) { el = document.getElementById(els) } - if (!el) { el = document.querySelector('.' + els) } - return el as GridItemHTMLElement; - } - return els; + return Utils.getElement(els); } - - /** @internal convert a potential selector into actual list of elements */ + /** @internal */ private static getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { - if (typeof els === 'string') { - let list = document.querySelectorAll(els); - if (!list.length && els[0] !== '.' && els[0] !== '#') { - list = document.querySelectorAll('.' + els); - if (!list.length) { list = document.querySelectorAll('#' + els) } - } - return Array.from(list) as GridItemHTMLElement[]; - } - return [els]; + return Utils.getElements(els); } /** @internal */ - private static getGridElement(els: string | HTMLElement = '.grid-stack'): GridHTMLElement { - return GridStack.getElement(els) as GridHTMLElement; + private static getGridElement(els: GridStackElement): GridHTMLElement { + return GridStack.getElement(els); } /** @internal */ - private static getGridElements(els: string | HTMLElement = '.grid-stack'): GridHTMLElement[] { - return GridStack.getElements(els) as GridHTMLElement[]; + private static getGridElements(els: string): GridHTMLElement[] { + return Utils.getElements(els); } /** @internal initialize margin top/bottom/left/right and units */ diff --git a/src/types.ts b/src/types.ts index 6710e766d..53c329e5c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -24,6 +24,8 @@ export interface GridItemHTMLElement extends HTMLElement { _gridstackNodeOrig?: GridStackNode; } +export type GridStackElement = string | HTMLElement | GridItemHTMLElement; + /** * Defines the options for a Grid */ diff --git a/src/utils.ts b/src/utils.ts index 4eecb6010..a96044d29 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -6,7 +6,7 @@ * gridstack.js may be freely distributed under the MIT license. */ -import { GridStackWidget, GridStackNode, GridStackOptions, numberOrString } from './types'; +import { GridStackElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString } from './types'; export interface HeightData { height: number; @@ -56,6 +56,44 @@ export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, */ export class Utils { + /** convert a potential selector into actual list of html elements */ + static getElements(els: GridStackElement): HTMLElement[] { + if (typeof els === 'string') { + let list = document.querySelectorAll(els); + if (!list.length && els[0] !== '.' && els[0] !== '#') { + list = document.querySelectorAll('.' + els); + if (!list.length) { list = document.querySelectorAll('#' + els) } + } + return Array.from(list) as HTMLElement[]; + } + return [els]; + } + + /** convert a potential selector into actual single element */ + static getElement(els: GridStackElement): HTMLElement { + if (typeof els === 'string') { + if (!els.length) { return null} + if (els[0] === '#') { + return document.getElementById(els.substring(1)); + } + if (els[0] === '.') { + return document.querySelector(els); + } + + // if we start with a digit, assume it's an id (error calling querySelector('#1')) as class are not valid CSS + if(!isNaN(+els[0])) { // start with digit + return document.getElementById(els); + } + + // finally try string, then id then class + let el = document.querySelector(els); + if (!el) { el = document.getElementById(els) } + if (!el) { el = document.querySelector('.' + els) } + return el as HTMLElement; + } + return els; + } + /** returns true if a and b overlap */ static isIntercepted(a: GridStackWidget, b: GridStackWidget): boolean { return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y); From fd8e3e04d9fcb05859160a2443cc86134f79d7bd Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 18 Nov 2020 07:10:19 -0800 Subject: [PATCH 0321/1298] h5: travis fix node_js 10.19 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e8b0fe1e0..2aba306bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- 8.17.0 +- 10.19.0 dist: trusty sudo: required addons: From a2013924f7d6a06273e5cb34663ea83a13606eb6 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 21 Nov 2020 09:44:18 -0800 Subject: [PATCH 0322/1298] t5: moved native dd files --- src/{dragdrop => h5}/dd-base-impl.ts | 0 src/{dragdrop => h5}/dd-draggable.ts | 0 src/{dragdrop => h5}/dd-droppable.ts | 0 src/{dragdrop => h5}/dd-element.ts | 0 src/{dragdrop => h5}/dd-manager.ts | 0 src/{dragdrop => h5}/dd-resizable-handle.ts | 0 src/{dragdrop => h5}/dd-resizable.ts | 0 src/{dragdrop => h5}/dd-utils.ts | 0 src/{dragdrop => h5}/gridstack-dd-native.ts | 0 src/index-h5.ts | 2 +- 10 files changed, 1 insertion(+), 1 deletion(-) rename src/{dragdrop => h5}/dd-base-impl.ts (100%) rename src/{dragdrop => h5}/dd-draggable.ts (100%) rename src/{dragdrop => h5}/dd-droppable.ts (100%) rename src/{dragdrop => h5}/dd-element.ts (100%) rename src/{dragdrop => h5}/dd-manager.ts (100%) rename src/{dragdrop => h5}/dd-resizable-handle.ts (100%) rename src/{dragdrop => h5}/dd-resizable.ts (100%) rename src/{dragdrop => h5}/dd-utils.ts (100%) rename src/{dragdrop => h5}/gridstack-dd-native.ts (100%) diff --git a/src/dragdrop/dd-base-impl.ts b/src/h5/dd-base-impl.ts similarity index 100% rename from src/dragdrop/dd-base-impl.ts rename to src/h5/dd-base-impl.ts diff --git a/src/dragdrop/dd-draggable.ts b/src/h5/dd-draggable.ts similarity index 100% rename from src/dragdrop/dd-draggable.ts rename to src/h5/dd-draggable.ts diff --git a/src/dragdrop/dd-droppable.ts b/src/h5/dd-droppable.ts similarity index 100% rename from src/dragdrop/dd-droppable.ts rename to src/h5/dd-droppable.ts diff --git a/src/dragdrop/dd-element.ts b/src/h5/dd-element.ts similarity index 100% rename from src/dragdrop/dd-element.ts rename to src/h5/dd-element.ts diff --git a/src/dragdrop/dd-manager.ts b/src/h5/dd-manager.ts similarity index 100% rename from src/dragdrop/dd-manager.ts rename to src/h5/dd-manager.ts diff --git a/src/dragdrop/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts similarity index 100% rename from src/dragdrop/dd-resizable-handle.ts rename to src/h5/dd-resizable-handle.ts diff --git a/src/dragdrop/dd-resizable.ts b/src/h5/dd-resizable.ts similarity index 100% rename from src/dragdrop/dd-resizable.ts rename to src/h5/dd-resizable.ts diff --git a/src/dragdrop/dd-utils.ts b/src/h5/dd-utils.ts similarity index 100% rename from src/dragdrop/dd-utils.ts rename to src/h5/dd-utils.ts diff --git a/src/dragdrop/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts similarity index 100% rename from src/dragdrop/gridstack-dd-native.ts rename to src/h5/gridstack-dd-native.ts diff --git a/src/index-h5.ts b/src/index-h5.ts index 1000242c2..aed9ad2de 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -8,6 +8,6 @@ export * from './gridstack-engine'; export * from './gridstack-dd'; export * from './gridstack'; -export * from './dragdrop/gridstack-dd-native'; +export * from './h5/gridstack-dd-native'; // declare module 'gridstack'; for umd ? From 21474391ba6669760a9577ef8d757a3d33eccf29 Mon Sep 17 00:00:00 2001 From: Pablo Sichert Date: Sat, 21 Nov 2020 19:08:41 +0100 Subject: [PATCH 0323/1298] Fix placeholder not carrying base item class --- src/gridstack.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index d1f67de11..f7d3bf981 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -298,7 +298,7 @@ export class GridStack { placeholderChild.className = 'placeholder-content'; placeholderChild.innerHTML = this.opts.placeholderText; this.placeholder = document.createElement('div'); - this.placeholder.classList.add(this.opts.placeholderClass, this.opts.itemClass); + this.placeholder.classList.add(this.opts.placeholderClass, defaults.itemClass, this.opts.itemClass); this.placeholder.appendChild(placeholderChild); this._updateContainerHeight(); From 70777ded148eba97043cca986a90d61b48add4a2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 21 Nov 2020 20:19:27 -0800 Subject: [PATCH 0324/1298] h5: moved all DD code to gridstack-dd.ts * all drag&drop grid code has been moved to gridstack-dd.ts (base class for html5 and jquery version) * that reduces static grid requirements down from 43k to just 35k * with html5 complete is still 64k (+29k) and jq 187k (+152k) --- src/gridstack-dd.ts | 491 +++++++++++++++++++++++++++++++++++++--- src/gridstack-ddi.ts | 34 +++ src/gridstack.ts | 516 +++++-------------------------------------- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- 6 files changed, 548 insertions(+), 499 deletions(-) create mode 100644 src/gridstack-ddi.ts diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index de831c7b4..883eb5706 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-dd.ts 2.2.0-dev @preserve +// gridstack-GridStackDD.get().ts 2.2.0-dev @preserve /** * https://gridstackjs.com/ @@ -7,8 +7,10 @@ */ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { GridStackElement } from './gridstack'; -import { GridItemHTMLElement, DDDragInOpt } from './types'; +import { GridStackDDI } from './gridstack-ddi'; +import { GridItemHTMLElement, GridStackNode, GridStackElement, DDUIData, DDDragInOpt } from './types'; +import { GridStack } from './gridstack'; +import { Utils } from './utils'; /** Drag&Drop drop options */ export type DDDropOpt = { @@ -26,19 +28,13 @@ export type DDValue = number | string; export type DDCallback = (event: Event, arg2: GridItemHTMLElement, helper?: GridItemHTMLElement) => void; /** - * Base class for drag'n'drop plugin. + * Base class implementing common Grid drag'n'drop functionality, with domain specific subclass (h5 vs jq subclasses) */ -export class GridStackDD { - static registeredPlugins: typeof GridStackDD; +export abstract class GridStackDD extends GridStackDDI { - /** call this method to register your plugin instead of the default no-op one */ - static registerPlugin(pluginClass: typeof GridStackDD): void { - GridStackDD.registeredPlugins = pluginClass; - } - - /** get the current registered plugin to use */ - static get(): typeof GridStackDD { - return GridStackDD.registeredPlugins || GridStackDD; + /** override to cast to correct type */ + static get(): GridStackDD { + return GridStackDDI.get() as GridStackDD; } /** removes any drag&drop present (called during destroy) */ @@ -50,35 +46,470 @@ export class GridStackDD { return this; } - public resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD { - return this; + // APIs that must be implemented by subclasses to do actual darg/drop/resize called by GridStack code below + + public abstract resizable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD; + + public abstract draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD; + + public abstract dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDD; + + public abstract isDraggable(el: GridStackElement): boolean; + + public abstract droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDD; + + public abstract isDroppable(el: GridItemHTMLElement): boolean; + + public abstract on(el: GridItemHTMLElement, eventName: string, callback: DDCallback): GridStackDD; + + public abstract off(el: GridItemHTMLElement, eventName: string): GridStackDD; +} + +/******************************************************************************** + * GridStack code that is doing drag&drop extracted here so main class is smaller + * for static grid that don't do any of this work anyway. Saves about 10k. + ********************************************************************************/ + +/** @internal called to add drag over support to support widgets */ +GridStack.prototype._setupAcceptWidget = function(): GridStack { + if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; + + let onDrag = (event, el: GridItemHTMLElement) => { + let node = el.gridstackNode; + let pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); + let x = Math.max(0, pos.x); + let y = Math.max(0, pos.y); + if (!node._added) { + node._added = true; + + node.el = el; + node.x = x; + node.y = y; + delete node.autoPosition; + this.engine.cleanNodes(); + this.engine.beginUpdate(node); + this.engine.addNode(node); + + this._writeAttrs(this.placeholder, node.x, node.y, node.width, node.height); + this.el.appendChild(this.placeholder); + node.el = this.placeholder; // dom we update while dragging... + node._beforeDragX = node.x; + node._beforeDragY = node.y; + + this._updateContainerHeight(); + } else if ((x !== node.x || y !== node.y) && this.engine.canMoveNode(node, x, y)) { + this.engine.moveNode(node, x, y); + this._updateContainerHeight(); + } + }; + + GridStackDD.get() + .droppable(this.el, { + accept: (el: GridItemHTMLElement) => { + let node: GridStackNode = el.gridstackNode; + if (node && node.grid === this) { + return false; + } + if (typeof this.opts.acceptWidgets === 'function') { + return this.opts.acceptWidgets(el); + } + let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string); + return el.matches(selector); + } + }) + .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { + + // see if we already have a node with widget/height and check for attributes + let node = el.gridstackNode || {}; + if (!node.width || !node.height) { + let w = parseInt(el.getAttribute('data-gs-width')); + if (w > 0) { node.width = w; } + let h = parseInt(el.getAttribute('data-gs-height')); + if (h > 0) { node.height = h; } + } + + // if the item came from another grid, let it know it was added here to removed duplicate shadow #393 + if (node.grid && node.grid !== this) { + node._added = true; + } + + // if not calculate the grid size based on element outer size + let width = node.width || Math.round(el.offsetWidth / this.cellWidth()) || 1; + let height = node.height || Math.round(el.offsetHeight / this.getCellHeight(true)) || 1; + + // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific + let newNode = this.engine.prepareNode({...node, ...{width, height, _added: false, _temporary: true}}); + newNode._isOutOfGrid = true; + el.gridstackNode = newNode; + el._gridstackNodeOrig = node; + + GridStackDD.get().on(el, 'drag', onDrag); + return false; // prevent parent from receiving msg (which may be grid as well) + }) + .on(this.el, 'dropout', (event, el: GridItemHTMLElement) => { + // jquery-ui bug. Must verify widget is being dropped out + // check node variable that gets set when widget is out of grid + let node = el.gridstackNode; + if (!node || !node._isOutOfGrid) { + return; + } + GridStackDD.get().off(el, 'drag'); + node.el = null; + this.engine.removeNode(node); + if (this.placeholder.parentNode === this.el) { + this.placeholder.remove(); + } + this._updateContainerHeight(); + el.gridstackNode = el._gridstackNodeOrig; + return false; // prevent parent from receiving msg (which may be grid as well) + }) + .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => { + this.placeholder.remove(); + + // notify previous grid of removal + let origNode = el._gridstackNodeOrig; + delete el._gridstackNodeOrig; + if (origNode && origNode.grid && origNode.grid !== this) { + let oGrid = origNode.grid; + oGrid.placeholder.remove(); + origNode.el = el; // was using placeholder, have it point to node we've moved instead + oGrid.engine.removedNodes.push(origNode); + oGrid._triggerRemoveEvent(); + } + + let node = el.gridstackNode; // use existing placeholder node as it's already in our list with drop location + const _id = node._id; + this.engine.cleanupNode(node); // removes all internal _xyz values (including the _id so add that back) + node._id = _id; + node.grid = this; + GridStackDD.get().off(el, 'drag'); + // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102) + // as the helper will be nuked by jqueryui otherwise + if (helper !== el) { + helper.remove(); + el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info + el = el.cloneNode(true) as GridItemHTMLElement; + } else { + el.remove(); // reduce flicker as we change depth here, and size further down + GridStackDD.get().remove(el); + } + el.gridstackNode = node; + node.el = el; + + Utils.removePositioningStyles(el); + this._writeAttr(el, node); + this.el.appendChild(el); + this._updateContainerHeight(); + this.engine.addedNodes.push(node); + this._triggerAddEvent(); + this._triggerChangeEvent(); + + this.engine.endUpdate(); + if (this._gsEventHandler['dropped']) { + this._gsEventHandler['dropped']({type: 'dropped'}, origNode && origNode.grid ? origNode : undefined, node); + } + + // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up + // IFF we are still there (some application will use as placeholder and insert their real widget instead) + window.setTimeout(() => { + if (node.el && node.el.parentElement) this._prepareDragDropByNode(node); + }); + + return false; // prevent parent from receiving msg (which may be grid as well) + }); + return this; +} + +/** @internal called to setup a trash drop zone if the user specifies it */ +GridStack.prototype._setupRemoveDrop = function(): GridStack { + if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { + let trashZone = document.querySelector(this.opts.removable) as HTMLElement; + if (!trashZone) return this; + // only register ONE dropover/dropout callback for the 'trash', and it will + // update the passed in item and parent grid because the 'trash' is a shared resource anyway, + // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly) + if (!GridStackDD.get().isDroppable(trashZone)) { + GridStackDD.get().droppable(trashZone, this.opts.removableOptions) + .on(trashZone, 'dropover', function(event, el) { // don't use => notation to avoid using 'this' as grid by mistake... + let node = el.gridstackNode; + if (!node || !node.grid) return; + el.dataset.inTrashZone = 'true'; + node.grid._setupRemovingTimeout(el); + }) + .on(trashZone, 'dropout', function(event, el) { // same + let node = el.gridstackNode; + if (!node || !node.grid) return; + delete el.dataset.inTrashZone; + node.grid._clearRemovingTimeout(el); + }); + } } + return this; +} - public draggable(el: GridItemHTMLElement, opts: DDOpts, key?: DDKey, value?: DDValue): GridStackDD { - return this; +/** @internal */ +GridStack.prototype._setupRemovingTimeout = function(el: GridItemHTMLElement): GridStack { + let node = el.gridstackNode; + if (!node || node._removeTimeout || !this.opts.removable) return this; + node._removeTimeout = window.setTimeout(() => { + el.classList.add('grid-stack-item-removing'); + node._isAboutToRemove = true; + }, this.opts.removeTimeout); + return this; +} + +/** @internal */ +GridStack.prototype._clearRemovingTimeout = function(el: GridItemHTMLElement): GridStack { + let node = el.gridstackNode; + if (!node || !node._removeTimeout) return this; + clearTimeout(node._removeTimeout); + delete node._removeTimeout; + el.classList.remove('grid-stack-item-removing'); + delete node._isAboutToRemove; + return this; +} + +/** @internal call to setup dragging in from the outside (say toolbar), with options */ +GridStack.prototype._setupDragIn = function(): GridStack { + if (!this.opts.staticGrid && typeof this.opts.dragIn === 'string') { + if (!GridStackDD.get().isDraggable(this.opts.dragIn)) { + GridStackDD.get().dragIn(this.opts.dragIn, this.opts.dragInOptions); + } } + return this; +} - public dragIn(el: GridStackElement, opts: DDDragInOpt): GridStackDD { +/** @internal prepares the element for drag&drop **/ +GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): GridStack { + // check for disabled grid first + if (this.opts.staticGrid || node.locked || + ((node.noMove || this.opts.disableDrag) && (node.noResize || this.opts.disableResize))) { + if (node._initDD) { + GridStackDD.get().remove(node.el); // nukes everything instead of just disable, will add some styles back next + delete node._initDD; + } + node.el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435 return this; } - - public isDraggable(el: GridStackElement): boolean { - return false; + // check if init already done + if (node._initDD) { + return this; } - public droppable(el: GridItemHTMLElement, opts: DDOpts | DDDropOpt, key?: DDKey, value?: DDValue): GridStackDD { - return this; + // remove our style that look like D&D + node.el.classList.remove('ui-draggable-disabled', 'ui-resizable-disabled'); + + // variables used/cashed between the 3 start/move/end methods, in addition to node passed above + let cellWidth: number; + let cellHeight: number; + let el = node.el; + + /** called when item starts moving/resizing */ + let onStartMoving = (event: Event, ui: DDUIData): void => { + let target = event.target as HTMLElement; + + // trigger any 'dragstart' / 'resizestart' manually + if (this._gsEventHandler[event.type]) { + this._gsEventHandler[event.type](event, target); + } + + this.engine.cleanNodes(); + this.engine.beginUpdate(node); + cellWidth = this.cellWidth(); + cellHeight = this.getCellHeight(true); // force pixels for calculations + + this.placeholder.setAttribute('data-gs-x', target.getAttribute('data-gs-x')); + this.placeholder.setAttribute('data-gs-y', target.getAttribute('data-gs-y')); + this.placeholder.setAttribute('data-gs-width', target.getAttribute('data-gs-width')); + this.placeholder.setAttribute('data-gs-height', target.getAttribute('data-gs-height')); + this.el.append(this.placeholder); + + node.el = this.placeholder; + node._beforeDragX = node.x; + node._beforeDragY = node.y; + node._prevYPix = ui.position.top; + + GridStackDD.get().resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); + GridStackDD.get().resizable(el, 'option', 'minHeight', cellHeight * (node.minHeight || 1)); } - public isDroppable(el: GridItemHTMLElement): boolean { - return false; + /** called when item is being dragged/resized */ + let dragOrResize = (event: Event, ui: DDUIData): void => { + let x = Math.round(ui.position.left / cellWidth); + let y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); + let width; + let height; + + if (event.type === 'drag') { + let distance = ui.position.top - node._prevYPix; + node._prevYPix = ui.position.top; + Utils.updateScrollPosition(el, ui.position, distance); + // if inTrash, outside of the bounds or added to another grid (#393) temporarily remove it from us + if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || (!this.engine.float && y > this.engine.getRow()) || node._added) { + if (node._temporaryRemoved) { return; } + if (this.opts.removable === true) { + this._setupRemovingTimeout(el); + } + + x = node._beforeDragX; + y = node._beforeDragY; + + if (this.placeholder.parentNode === this.el) { + this.placeholder.remove(); + } + this.engine.removeNode(node); + this._updateContainerHeight(); + + node._temporaryRemoved = true; + delete node._added; // no need for this now + } else { + this._clearRemovingTimeout(el); + + if (node._temporaryRemoved) { + this.engine.addNode(node); + this._writeAttrs(this.placeholder, x, y, width, height); + this.el.appendChild(this.placeholder); + node.el = this.placeholder; + delete node._temporaryRemoved; + } + } + } else if (event.type === 'resize') { + if (x < 0) return; + width = Math.round(ui.size.width / cellWidth); + height = Math.round(ui.size.height / cellHeight); + } + // width and height are undefined if not resizing + let _lastTriedWidth = (width || node._lastTriedWidth); + let _lastTriedHeight = (height || node._lastTriedHeight); + if (!this.engine.canMoveNode(node, x, y, width, height) || + (node._lastTriedX === x && node._lastTriedY === y && + node._lastTriedWidth === _lastTriedWidth && node._lastTriedHeight === _lastTriedHeight)) { + return; + } + node._lastTriedX = x; + node._lastTriedY = y; + node._lastTriedWidth = width; + node._lastTriedHeight = height; + this.engine.moveNode(node, x, y, width, height); + this._updateContainerHeight(); } - public on(el: GridItemHTMLElement, eventName: string, callback: DDCallback): GridStackDD { - return this; + /** called when the item stops moving/resizing */ + let onEndMoving = (event: Event): void => { + if (this.placeholder.parentNode === this.el) { + this.placeholder.remove(); + } + + // if the item has moved to another grid, we're done here + let target: GridItemHTMLElement = event.target as GridItemHTMLElement; + if (!target.gridstackNode || target.gridstackNode.grid !== this) return; + + node.el = target; + + if (node._isAboutToRemove) { + let gridToNotify = el.gridstackNode.grid; + if (gridToNotify._gsEventHandler[event.type]) { + gridToNotify._gsEventHandler[event.type](event, target); + } + gridToNotify.engine.removedNodes.push(node); + GridStackDD.get().remove(el); + delete el.gridstackNode; // hint we're removing it next and break circular link + gridToNotify._triggerRemoveEvent(); + if (el.parentElement) { + el.remove(); // finally remove it + } + } else { + this._clearRemovingTimeout(el); + if (!node._temporaryRemoved) { + Utils.removePositioningStyles(target); + this._writeAttrs(target, node.x, node.y, node.width, node.height); + } else { + Utils.removePositioningStyles(target); + this._writeAttrs(target, node._beforeDragX, node._beforeDragY, node.width, node.height); + node.x = node._beforeDragX; + node.y = node._beforeDragY; + delete node._temporaryRemoved; + this.engine.addNode(node); + } + if (this._gsEventHandler[event.type]) { + this._gsEventHandler[event.type](event, target); + } + } + + this._updateContainerHeight(); + this._triggerChangeEvent(); + + this.engine.endUpdate(); + + // if we re-sized a nested grid item, let the children resize as well + if (event.type === 'resizestop') { + this._resizeNestedGrids(target); + } } - public off(el: GridItemHTMLElement, eventName: string): GridStackDD { - return this; + GridStackDD.get() + .draggable(el, { + start: onStartMoving, + stop: onEndMoving, + drag: dragOrResize + }) + .resizable(el, { + start: onStartMoving, + stop: onEndMoving, + resize: dragOrResize + }); + node._initDD = true; // we've set DD support now + + // finally fine tune drag vs move by disabling any part... + if (node.noMove || this.opts.disableDrag) { + GridStackDD.get().draggable(el, 'disable'); + } + if (node.noResize || this.opts.disableResize) { + GridStackDD.get().resizable(el, 'disable'); } + return this; +} + +/** + * Enables/Disables moving. + * @param els widget or selector to modify. + * @param val if true widget will be draggable. + */ +GridStack.prototype.movable = function(els: GridStackElement, val: boolean): GridStack { + if (val && this.opts.staticGrid) { return this; } // can't move a static grid! + GridStack.getElements(els).forEach(el => { + let node = el.gridstackNode; + if (!node) { return } + node.noMove = !(val || false); + if (node.noMove) { + GridStackDD.get().draggable(el, 'disable'); + el.classList.remove('ui-draggable-handle'); + } else { + this._prepareDragDropByNode(node); // init DD if need be + GridStackDD.get().draggable(el, 'enable'); + el.classList.remove('ui-draggable-handle'); + } + }); + return this; +} + +/** + * Enables/Disables resizing. + * @param els widget or selector to modify + * @param val if true widget will be resizable. + */ +GridStack.prototype.resizable = function(els: GridStackElement, val: boolean): GridStack { + if (val && this.opts.staticGrid) { return this; } // can't resize a static grid! + GridStack.getElements(els).forEach(el => { + let node = el.gridstackNode; + if (!node) { return; } + node.noResize = !(val || false); + if (node.noResize) { + GridStackDD.get().resizable(el, 'disable'); + } else { + this._prepareDragDropByNode(node); // init DD if need be + GridStackDD.get().resizable(el, 'enable'); + } + }); + return this; } diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts new file mode 100644 index 000000000..6922b5998 --- /dev/null +++ b/src/gridstack-ddi.ts @@ -0,0 +1,34 @@ +// gridstack-ddi.ts 2.2.0-dev @preserve + +/** + * https://gridstackjs.com/ + * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov + * gridstack.js may be freely distributed under the MIT license. +*/ +/* eslint-disable @typescript-eslint/no-unused-vars */ + +import { GridItemHTMLElement } from './types'; + +/** + * Abstract Partial Interface API for drag'n'drop plugin - look at GridStackDD and HTML5 / Jquery implementation versions + */ +export class GridStackDDI { + + protected static ddi: GridStackDDI; + + /** call this method to register your plugin instead of the default no-op one */ + static registerPlugin(pluginClass: typeof GridStackDDI): void { + GridStackDDI.ddi = new pluginClass(); + } + + /** get the current registered plugin to use */ + static get(): GridStackDDI { + if (!GridStackDDI.ddi) { GridStackDDI.registerPlugin(GridStackDDI); } + return GridStackDDI.ddi; + } + + /** removes any drag&drop present (called during destroy) */ + public remove(el: GridItemHTMLElement): GridStackDDI { + return this; // no-op for static grids + } +} diff --git a/src/gridstack.ts b/src/gridstack.ts index 7120662f2..9cbb1db44 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -8,14 +8,14 @@ import { GridStackEngine } from './gridstack-engine'; import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils, HeightData } from './utils'; -import { GridStackElement, GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, ColumnOptions, DDUIData } from './types'; -import { GridStackDD } from './gridstack-dd'; +import { GridStackElement, GridItemHTMLElement, GridStackWidget, GridStackNode, GridStackOptions, numberOrString, ColumnOptions } from './types'; +import { GridStackDDI } from './gridstack-ddi'; // export all dependent file as well to make it easier for users to just import the main file export * from './types'; export * from './utils'; export * from './gridstack-engine'; -export * from './gridstack-dd'; +export * from './gridstack-ddi'; export interface GridHTMLElement extends HTMLElement { gridstack?: GridStack; // grid's parent DOM element points back to grid class @@ -40,9 +40,6 @@ interface GridCSSStyleSheet extends CSSStyleSheet { _max?: number; // internal tracker of the max # of rows we created\ } -/** current drag&drop plugin being used - first grid will initialize */ -let dd: GridStackDD; - /** * Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid. * Note: your grid elements MUST have the following classes for the CSS layout to work: @@ -125,13 +122,13 @@ export class GridStack { public opts: GridStackOptions; /** @internal */ - private placeholder: HTMLElement; + public placeholder: HTMLElement; /** @internal */ private _oneColumnMode: boolean; /** @internal */ private _prevColumn: number; /** @internal */ - private _gsEventHandler = {}; + public _gsEventHandler = {}; /** @internal */ private _styles: GridCSSStyleSheet; /** @internal flag to keep cells square during resize */ @@ -219,10 +216,9 @@ export class GridStack { } this.opts = Utils.defaults(opts, defaults); + opts = null; // make sure we use this.opts instead this.initMargin(); - dd = dd || new (GridStackDD.get())(); - if (this.opts.rtl === 'auto') { this.opts.rtl = el.style.direction === 'rtl'; } @@ -231,7 +227,7 @@ export class GridStack { this.el.classList.add('grid-stack-rtl'); } - this.opts._isNested = Utils.closestByClass(this.el, opts.itemClass) !== null; + this.opts._isNested = Utils.closestByClass(this.el, this.opts.itemClass) !== null; if (this.opts._isNested) { this.el.classList.add('grid-stack-nested'); } @@ -263,9 +259,7 @@ export class GridStack { } }); this._updateStyles(false, maxHeight); // false = don't recreate, just append if need be - }, - this.opts.float, - this.opts.maxRow); + }, this.opts.float, this.opts.maxRow); if (this.opts.auto) { let elements: {el: HTMLElement; i: number}[] = []; @@ -773,29 +767,6 @@ export class GridStack { return this._updateAttr(els, val, 'data-gs-min-height', 'minHeight'); } - /** - * Enables/Disables moving. - * @param els widget or selector to modify. - * @param val if true widget will be draggable. - */ - public movable(els: GridStackElement, val: boolean): GridStack { - if (val && this.opts.staticGrid) { return this; } // can't move a static grid! - GridStack.getElements(els).forEach(el => { - let node = el.gridstackNode; - if (!node) { return } - node.noMove = !(val || false); - if (node.noMove) { - dd.draggable(el, 'disable'); - el.classList.remove('ui-draggable-handle'); - } else { - this._prepareDragDropByNode(node); // init DD if need be - dd.draggable(el, 'enable'); - el.classList.remove('ui-draggable-handle'); - } - }); - return this; - } - /** * Changes widget position * @param els widget or singular selector to modify @@ -897,7 +868,7 @@ export class GridStack { // remove our DOM data (circular link) and drag&drop permanently delete el.gridstackNode; - dd.remove(el); + GridStackDDI.get().remove(el); this.engine.removeNode(node, removeDOM, triggerEvent); @@ -920,7 +891,7 @@ export class GridStack { // always remove our DOM data (circular link) before list gets emptied and drag&drop permanently this.engine.nodes.forEach(n => { delete n.el.gridstackNode; - dd.remove(n.el); + GridStackDDI.get().remove(n.el); }); this.engine.removeAll(removeDOM); this._triggerRemoveEvent(); @@ -943,27 +914,6 @@ export class GridStack { return this; } - /** - * Enables/Disables resizing. - * @param els widget or selector to modify - * @param val if true widget will be resizable. - */ - public resizable(els: GridStackElement, val: boolean): GridStack { - if (val && this.opts.staticGrid) { return this; } // can't resize a static grid! - GridStack.getElements(els).forEach(el => { - let node = el.gridstackNode; - if (!node) { return; } - node.noResize = !(val || false); - if (node.noResize) { - dd.resizable(el, 'disable'); - } else { - this._prepareDragDropByNode(node); // init DD if need be - dd.resizable(el, 'enable'); - } - }); - return this; - } - /** * Toggle the grid animation state. Toggles the `grid-stack-animate` class. * @param doAnimate if true the grid will animate. @@ -1083,7 +1033,7 @@ export class GridStack { } /** @internal */ - private _triggerRemoveEvent(): GridStack { + public _triggerRemoveEvent(): GridStack { if (this.engine.batchMode) { return this; } if (this.engine.removedNodes && this.engine.removedNodes.length > 0) { this._triggerEvent('removed', this.engine.removedNodes); @@ -1195,219 +1145,6 @@ export class GridStack { return this; } - /** @internal */ - private _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { - let node = el.gridstackNode; - if (!node || node._removeTimeout || !this.opts.removable) return this; - node._removeTimeout = window.setTimeout(() => { - el.classList.add('grid-stack-item-removing'); - node._isAboutToRemove = true; - }, this.opts.removeTimeout); - return this; - } - - /** @internal */ - private _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { - let node = el.gridstackNode; - if (!node || !node._removeTimeout) return this; - clearTimeout(node._removeTimeout); - delete node._removeTimeout; - el.classList.remove('grid-stack-item-removing'); - delete node._isAboutToRemove; - return this; - } - - /** @internal prepares the element for drag&drop **/ - private _prepareDragDropByNode(node: GridStackNode): GridStack { - // check for disabled grid first - if (this.opts.staticGrid || node.locked || - ((node.noMove || this.opts.disableDrag) && (node.noResize || this.opts.disableResize))) { - if (node._initDD) { - dd.remove(node.el); // nukes everything instead of just disable, will add some styles back next - delete node._initDD; - } - node.el.classList.add('ui-draggable-disabled', 'ui-resizable-disabled'); // add styles one might depend on #1435 - return this; - } - // check if init already done - if (node._initDD) { - return this; - } - - // remove our style that look like D&D - node.el.classList.remove('ui-draggable-disabled', 'ui-resizable-disabled'); - - // variables used/cashed between the 3 start/move/end methods, in addition to node passed above - let cellWidth: number; - let cellHeight: number; - let el = node.el; - - /** called when item starts moving/resizing */ - let onStartMoving = (event: Event, ui: DDUIData): void => { - let target = event.target as HTMLElement; - - // trigger any 'dragstart' / 'resizestart' manually - if (this._gsEventHandler[event.type]) { - this._gsEventHandler[event.type](event, target); - } - - this.engine.cleanNodes(); - this.engine.beginUpdate(node); - cellWidth = this.cellWidth(); - cellHeight = this.getCellHeight(true); // force pixels for calculations - - this.placeholder.setAttribute('data-gs-x', target.getAttribute('data-gs-x')); - this.placeholder.setAttribute('data-gs-y', target.getAttribute('data-gs-y')); - this.placeholder.setAttribute('data-gs-width', target.getAttribute('data-gs-width')); - this.placeholder.setAttribute('data-gs-height', target.getAttribute('data-gs-height')); - this.el.append(this.placeholder); - - node.el = this.placeholder; - node._beforeDragX = node.x; - node._beforeDragY = node.y; - node._prevYPix = ui.position.top; - - dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1)); - dd.resizable(el, 'option', 'minHeight', cellHeight * (node.minHeight || 1)); - } - - /** called when item is being dragged/resized */ - let dragOrResize = (event: Event, ui: DDUIData): void => { - let x = Math.round(ui.position.left / cellWidth); - let y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); - let width; - let height; - - if (event.type === 'drag') { - let distance = ui.position.top - node._prevYPix; - node._prevYPix = ui.position.top; - Utils.updateScrollPosition(el, ui.position, distance); - // if inTrash, outside of the bounds or added to another grid (#393) temporarily remove it from us - if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || (!this.engine.float && y > this.engine.getRow()) || node._added) { - if (node._temporaryRemoved) { return; } - if (this.opts.removable === true) { - this._setupRemovingTimeout(el); - } - - x = node._beforeDragX; - y = node._beforeDragY; - - if (this.placeholder.parentNode === this.el) { - this.placeholder.remove(); - } - this.engine.removeNode(node); - this._updateContainerHeight(); - - node._temporaryRemoved = true; - delete node._added; // no need for this now - } else { - this._clearRemovingTimeout(el); - - if (node._temporaryRemoved) { - this.engine.addNode(node); - this._writeAttrs(this.placeholder, x, y, width, height); - this.el.appendChild(this.placeholder); - node.el = this.placeholder; - delete node._temporaryRemoved; - } - } - } else if (event.type === 'resize') { - if (x < 0) return; - width = Math.round(ui.size.width / cellWidth); - height = Math.round(ui.size.height / cellHeight); - } - // width and height are undefined if not resizing - let _lastTriedWidth = (width || node._lastTriedWidth); - let _lastTriedHeight = (height || node._lastTriedHeight); - if (!this.engine.canMoveNode(node, x, y, width, height) || - (node._lastTriedX === x && node._lastTriedY === y && - node._lastTriedWidth === _lastTriedWidth && node._lastTriedHeight === _lastTriedHeight)) { - return; - } - node._lastTriedX = x; - node._lastTriedY = y; - node._lastTriedWidth = width; - node._lastTriedHeight = height; - this.engine.moveNode(node, x, y, width, height); - this._updateContainerHeight(); - } - - /** called when the item stops moving/resizing */ - let onEndMoving = (event: Event): void => { - if (this.placeholder.parentNode === this.el) { - this.placeholder.remove(); - } - - // if the item has moved to another grid, we're done here - let target: GridItemHTMLElement = event.target as GridItemHTMLElement; - if (!target.gridstackNode || target.gridstackNode.grid !== this) return; - - node.el = target; - - if (node._isAboutToRemove) { - let gridToNotify = el.gridstackNode.grid; - if (gridToNotify._gsEventHandler[event.type]) { - gridToNotify._gsEventHandler[event.type](event, target); - } - gridToNotify.engine.removedNodes.push(node); - dd.remove(el); - delete el.gridstackNode; // hint we're removing it next and break circular link - gridToNotify._triggerRemoveEvent(); - if (el.parentElement) { - el.remove(); // finally remove it - } - } else { - this._clearRemovingTimeout(el); - if (!node._temporaryRemoved) { - Utils.removePositioningStyles(target); - this._writeAttrs(target, node.x, node.y, node.width, node.height); - } else { - Utils.removePositioningStyles(target); - this._writeAttrs(target, node._beforeDragX, node._beforeDragY, node.width, node.height); - node.x = node._beforeDragX; - node.y = node._beforeDragY; - delete node._temporaryRemoved; - this.engine.addNode(node); - } - if (this._gsEventHandler[event.type]) { - this._gsEventHandler[event.type](event, target); - } - } - - this._updateContainerHeight(); - this._triggerChangeEvent(); - - this.engine.endUpdate(); - - // if we re-sized a nested grid item, let the children resize as well - if (event.type === 'resizestop') { - this._resizeNestedGrids(target); - } - } - - dd - .draggable(el, { - start: onStartMoving, - stop: onEndMoving, - drag: dragOrResize - }) - .resizable(el, { - start: onStartMoving, - stop: onEndMoving, - resize: dragOrResize - }); - node._initDD = true; // we've set DD support now - - // finally fine tune drag vs move by disabling any part... - if (node.noMove || this.opts.disableDrag) { - dd.draggable(el, 'disable'); - } - if (node.noResize || this.opts.disableResize) { - dd.resizable(el, 'disable'); - } - return this; - } - /** called to resize children nested grids when we/item resizes */ private _resizeNestedGrids(target: HTMLElement): GridStack { target.querySelectorAll('.grid-stack').forEach((el: GridHTMLElement) => { @@ -1575,207 +1312,20 @@ export class GridStack { return this; } - /** @internal call to setup dragging in from the outside (say toolbar), with options */ - private _setupDragIn(): GridStack { - if (!this.opts.staticGrid && typeof this.opts.dragIn === 'string') { - if (!dd.isDraggable(this.opts.dragIn)) { - dd.dragIn(this.opts.dragIn, this.opts.dragInOptions); - } - } - return this; - } - - /** @internal called to setup a trash drop zone if the user specifies it */ - private _setupRemoveDrop(): GridStack { - if (!this.opts.staticGrid && typeof this.opts.removable === 'string') { - let trashZone = document.querySelector(this.opts.removable) as HTMLElement; - if (!trashZone) return this; - // only register ONE dropover/dropout callback for the 'trash', and it will - // update the passed in item and parent grid because the 'trash' is a shared resource anyway, - // and Native DD only has 1 event CB (having a list and technically a per grid removableOptions complicates things greatly) - if (!dd.isDroppable(trashZone)) { - dd.droppable(trashZone, this.opts.removableOptions) - .on(trashZone, 'dropover', function(event, el) { // don't use => notation to avoid using 'this' as grid by mistake... - let node = el.gridstackNode; - if (!node || !node.grid) return; - el.dataset.inTrashZone = 'true'; - node.grid._setupRemovingTimeout(el); - }) - .on(trashZone, 'dropout', function(event, el) { // same - let node = el.gridstackNode; - if (!node || !node.grid) return; - delete el.dataset.inTrashZone; - node.grid._clearRemovingTimeout(el); - }); - } - } - return this; - } - - /** @internal called to add drag over support to support widgets */ - private _setupAcceptWidget(): GridStack { - if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; - - let onDrag = (event, el: GridItemHTMLElement) => { - let node = el.gridstackNode; - let pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true); - let x = Math.max(0, pos.x); - let y = Math.max(0, pos.y); - if (!node._added) { - node._added = true; - - node.el = el; - node.x = x; - node.y = y; - delete node.autoPosition; - this.engine.cleanNodes(); - this.engine.beginUpdate(node); - this.engine.addNode(node); - - this._writeAttrs(this.placeholder, node.x, node.y, node.width, node.height); - this.el.appendChild(this.placeholder); - node.el = this.placeholder; // dom we update while dragging... - node._beforeDragX = node.x; - node._beforeDragY = node.y; - - this._updateContainerHeight(); - } else if ((x !== node.x || y !== node.y) && this.engine.canMoveNode(node, x, y)) { - this.engine.moveNode(node, x, y); - this._updateContainerHeight(); - } - }; - - dd - .droppable(this.el, { - accept: (el: GridItemHTMLElement) => { - let node: GridStackNode = el.gridstackNode; - if (node && node.grid === this) { - return false; - } - if (typeof this.opts.acceptWidgets === 'function') { - return this.opts.acceptWidgets(el); - } - let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string); - return el.matches(selector); - } - }) - .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { - - // see if we already have a node with widget/height and check for attributes - let node = el.gridstackNode || {}; - if (!node.width || !node.height) { - let w = parseInt(el.getAttribute('data-gs-width')); - if (w > 0) { node.width = w; } - let h = parseInt(el.getAttribute('data-gs-height')); - if (h > 0) { node.height = h; } - } - - // if the item came from another grid, let it know it was added here to removed duplicate shadow #393 - if (node.grid && node.grid !== this) { - node._added = true; - } - - // if not calculate the grid size based on element outer size - let width = node.width || Math.round(el.offsetWidth / this.cellWidth()) || 1; - let height = node.height || Math.round(el.offsetHeight / this.getCellHeight(true)) || 1; - - // copy the node original values (min/max/id/etc...) but override width/height/other flags which are this grid specific - let newNode = this.engine.prepareNode({...node, ...{width, height, _added: false, _temporary: true}}); - newNode._isOutOfGrid = true; - el.gridstackNode = newNode; - el._gridstackNodeOrig = node; - - dd.on(el, 'drag', onDrag); - return false; // prevent parent from receiving msg (which may be grid as well) - }) - .on(this.el, 'dropout', (event, el: GridItemHTMLElement) => { - // jquery-ui bug. Must verify widget is being dropped out - // check node variable that gets set when widget is out of grid - let node = el.gridstackNode; - if (!node || !node._isOutOfGrid) { - return; - } - dd.off(el, 'drag'); - node.el = null; - this.engine.removeNode(node); - if (this.placeholder.parentNode === this.el) { - this.placeholder.remove(); - } - this._updateContainerHeight(); - el.gridstackNode = el._gridstackNodeOrig; - return false; // prevent parent from receiving msg (which may be grid as well) - }) - .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => { - this.placeholder.remove(); - - // notify previous grid of removal - let origNode = el._gridstackNodeOrig; - delete el._gridstackNodeOrig; - if (origNode && origNode.grid && origNode.grid !== this) { - let oGrid = origNode.grid; - oGrid.placeholder.remove(); - origNode.el = el; // was using placeholder, have it point to node we've moved instead - oGrid.engine.removedNodes.push(origNode); - oGrid._triggerRemoveEvent(); - } - - let node = el.gridstackNode; // use existing placeholder node as it's already in our list with drop location - const _id = node._id; - this.engine.cleanupNode(node); // removes all internal _xyz values (including the _id so add that back) - node._id = _id; - node.grid = this; - dd.off(el, 'drag'); - // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102) - // as the helper will be nuked by jqueryui otherwise - if (helper !== el) { - helper.remove(); - el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info - el = el.cloneNode(true) as GridItemHTMLElement; - } else { - el.remove(); // reduce flicker as we change depth here, and size further down - dd.remove(el); - } - el.gridstackNode = node; - node.el = el; - - Utils.removePositioningStyles(el); - this._writeAttr(el, node); - this.el.appendChild(el); - this._updateContainerHeight(); - this.engine.addedNodes.push(node); - this._triggerAddEvent(); - this._triggerChangeEvent(); - - this.engine.endUpdate(); - if (this._gsEventHandler['dropped']) { - this._gsEventHandler['dropped']({type: 'dropped'}, origNode && origNode.grid ? origNode : undefined, node); - } - - // wait till we return out of the drag callback to set the new drag&resize handler or they may get messed up - // IFF we are still there (some application will use as placeholder and insert their real widget instead) - window.setTimeout(() => { - if (node.el && node.el.parentElement) this._prepareDragDropByNode(node); - }); - - return false; // prevent parent from receiving msg (which may be grid as well) - }); - return this; - } - /** @internal convert a potential selector into actual element */ - private static getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { + public static getElement(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement { return Utils.getElement(els); } /** @internal */ - private static getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { + public static getElements(els: GridStackElement = '.grid-stack-item'): GridItemHTMLElement[] { return Utils.getElements(els); } /** @internal */ - private static getGridElement(els: GridStackElement): GridHTMLElement { + public static getGridElement(els: GridStackElement): GridHTMLElement { return GridStack.getElement(els); } /** @internal */ - private static getGridElements(els: string): GridHTMLElement[] { + public static getGridElements(els: string): GridHTMLElement[] { return Utils.getElements(els); } @@ -1858,11 +1408,45 @@ export class GridStack { return this; } + /* + * drag&drop empty stubs that will be implemented in gridstack-dd.ts for non static grid + * so we don't incur the load unless needed. + * NOTE: had to make those methods public in order to define them else as + * GridStack.prototype._setupAcceptWidget = function() + * maybe there is a better way.... + */ + /* eslint-disable @typescript-eslint/no-unused-vars */ + + /** + * Enables/Disables moving. + * @param els widget or selector to modify. + * @param val if true widget will be draggable. + */ + public movable(els: GridStackElement, val: boolean): GridStack { return this; } + /** + * Enables/Disables resizing. + * @param els widget or selector to modify + * @param val if true widget will be resizable. + */ + public resizable(els: GridStackElement, val: boolean): GridStack { return this; } + /** @internal called to add drag over support to support widgets */ + public _setupAcceptWidget(): GridStack { return this; } + /** @internal called to setup a trash drop zone if the user specifies it */ + public _setupRemoveDrop(): GridStack { return this; } + /** @internal */ + public _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { return this; } + /** @internal */ + public _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { return this; } + /** @internal call to setup dragging in from the outside (say toolbar), with options */ + public _setupDragIn(): GridStack {return this; } + /** @internal prepares the element for drag&drop **/ + public _prepareDragDropByNode(node: GridStackNode): GridStack { return this; } + // legacy method renames /** @internal */ private setGridWidth = obsolete(this, GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3'); /** @internal */ private setColumn = obsolete(this, GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4'); /** @internal */ - private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); + private getGridHeight = obsolete(this, GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0'); } diff --git a/src/index-h5.ts b/src/index-h5.ts index aed9ad2de..41f45679d 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -5,7 +5,7 @@ export * from './types'; export * from './utils'; export * from './gridstack-engine'; -export * from './gridstack-dd'; +export * from './gridstack-ddi'; export * from './gridstack'; export * from './h5/gridstack-dd-native'; diff --git a/src/index-jq.ts b/src/index-jq.ts index 83ff13e2a..58681bfa6 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -5,7 +5,7 @@ export * from './types'; export * from './utils'; export * from './gridstack-engine'; -export * from './gridstack-dd'; +export * from './gridstack-ddi'; export * from './gridstack'; export * from './jq/gridstack-dd-jqueryui'; diff --git a/src/index-static.ts b/src/index-static.ts index 322d9e1ab..7fd4aca5e 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -5,7 +5,7 @@ export * from './types'; export * from './utils'; export * from './gridstack-engine'; -export * from './gridstack-dd'; +export * from './gridstack-ddi'; export * from './gridstack'; // declare module 'gridstack'; for umd ? From 78f159721920071d34a14fa4a32ba31f692e584e Mon Sep 17 00:00:00 2001 From: "Enrico Loparco (eloparco)" Date: Sun, 22 Nov 2020 12:50:33 +0100 Subject: [PATCH 0325/1298] Add react example --- demo/react.html | 104 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 demo/react.html diff --git a/demo/react.html b/demo/react.html new file mode 100644 index 000000000..240aed4a3 --- /dev/null +++ b/demo/react.html @@ -0,0 +1,104 @@ + + + + + + Gridstack.js React integration example + + + + + + + + + + +
    + + + + From 264b8c032fde7a5f9ebc025df0d08bf7c954f46b Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 22 Nov 2020 07:23:24 -0800 Subject: [PATCH 0326/1298] added link to Vue examples --- README.md | 6 +++--- demo/index.html | 1 + doc/CHANGES.md | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 084a56aa7..607e73802 100644 --- a/README.md +++ b/README.md @@ -271,9 +271,9 @@ If you're still experiencing issues on touch devices please check [#444](https:/ search for ['gridstack' under NPM](https://www.npmjs.com/search?q=gridstack&ranking=popularity) for latest, more to come... -- vue.js: see [demo v3](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue3js.html) or [demo v2](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue2js.html) -- React: [react-gridstack-example](https://github.com/Inder2108/react-gridstack-example/blob/master/src/App.js) or read on what [hooks to use](https://github.com/gridstack/gridstack.js/issues/735#issuecomment-329888796) -- ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) +- Vue.js: see [demo](https://gridstackjs.com/demo/vue3js.html) with [v3 src](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue3js.html) or [v2 src](https://github.com/gridstack/gridstack.js/blob/develop/demo/vue2js.html) +- React: see [demo](https://gridstackjs.com/demo/react.html) with [src](https://github.com/gridstack/gridstack.js/blob/develop/demo/react.html), or [react-gridstack-example](https://github.com/Inder2108/react-gridstack-example/blob/master/src/App.js), or read on what [hooks to use](https://github.com/gridstack/gridstack.js/issues/735#issuecomment-329888796) +- Ember: [ember-gridstack](https://github.com/yahoo/ember-gridstack) - Angular9: [lb-gridstack](https://github.com/pfms84/lb-gridstack) Note: very old v0.3 gridstack instance so recommend for concept ONLY. You can do component or directive. Working on exposing the Angular component wrapper we use internally. - AngularJS: [gridstack-angular](https://github.com/kdietrich/gridstack-angular) - Rails: [gridstack-js-rails](https://github.com/randoum/gridstack-js-rails) diff --git a/demo/index.html b/demo/index.html index 9c3c9dce4..d80570be9 100644 --- a/demo/index.html +++ b/demo/index.html @@ -14,6 +14,7 @@

    Demos

  • Knockout.js
  • Nested grids
  • Responsive
  • +
  • ReactJS
  • Right-To-Left (RTL)
  • Serialization
  • Static
  • diff --git a/doc/CHANGES.md b/doc/CHANGES.md index ec103b1a8..83411ccc6 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -43,7 +43,8 @@ Change log ## 2.2.0-dev -- TBD +- we now have a React example, in addition to Vue - Angular is next!. thanks [@eloparco](https://github.com/eloparco) +- fix placeholder not having custom `GridStackOptions.itemClass`. thanks [@pablosichert](https://github.com/pablosichert) ## 2.2.0 (2020-11-7) From cf4abd0d0f9a942eacc9965dcfe02f429091be41 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 22 Nov 2020 07:47:47 -0800 Subject: [PATCH 0327/1298] travis fix --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e8b0fe1e0..2aba306bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: -- 8.17.0 +- 10.19.0 dist: trusty sudo: required addons: From fe1b7fec54ad707eee4ba4fd7ca49c1970e5a643 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 22 Nov 2020 18:53:19 -0800 Subject: [PATCH 0328/1298] h5: remove jquery from tests, switch to h5 version * changed the tests to not have any $() jquery anymore and switch them to use the html5 DD instead * all demos now use html5 version, added two-jq.html for legacy and to compare * reverted back to karma-typescript 4.1.1 to get correct error line numbers * gridstack.all.js no longer exist. changed all to gridstack-h5.js and readme (more changes on how to include later) * isResizable (new) / isDraggable / isDroppable work on a single element as it was confusting to e list of items (could be miss-match) * latest tool lock file --- Gruntfile.js | 10 - README.md | 13 +- demo/advance-h5.html | 96 -- demo/advance.html | 2 +- demo/anijs.html | 2 +- demo/column.html | 2 +- demo/experiment/test.html | 86 -- demo/experiment/test2.html | 37 - demo/float.html | 2 +- demo/knockout.html | 2 +- demo/locked.html | 2 +- demo/nested.html | 2 +- demo/responsive.html | 2 +- demo/right-to-left(rtl).html | 2 +- demo/serialization.html | 2 +- demo/static.html | 2 +- demo/{two-h5.html => two-jq.html} | 2 +- demo/two.html | 2 +- demo/vue2js.html | 2 +- demo/vue3js.html | 2 +- doc/CHANGES.md | 2 +- karma.conf.js | 8 +- package.json | 2 +- .../1017-items-no-x-y-for-autoPosition.html | 2 +- spec/e2e/html/1102-button-between-grids.html | 2 +- spec/e2e/html/1142_change_event_missing.html | 2 +- .../html/1143_nested_acceptWidget_types.html | 2 +- spec/e2e/html/1155-max-row.html | 2 +- spec/e2e/html/1286-load.html | 2 +- spec/e2e/html/810-many-columns.html | 2 +- spec/gridstack-spec.ts | 524 ++++---- spec/utils-spec.ts | 10 +- src/gridstack-dd.ts | 18 +- src/h5/dd-base-impl.ts | 23 +- src/h5/gridstack-dd-native.ts | 28 +- src/jq/gridstack-dd-jqueryui.ts | 11 +- tsconfig.json | 3 +- webpack.config.js | 10 +- yarn.lock | 1060 ++++++++--------- 39 files changed, 869 insertions(+), 1116 deletions(-) delete mode 100644 demo/advance-h5.html delete mode 100644 demo/experiment/test.html delete mode 100644 demo/experiment/test2.html rename demo/{two-h5.html => two-jq.html} (99%) diff --git a/Gruntfile.js b/Gruntfile.js index b1e6813cb..052de2053 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -40,8 +40,6 @@ module.exports = function(grunt) { dist: { files: { 'dist/gridstack-poly.js': ['src/gridstack-poly.js'], - //'dist/jq/jquery.js': ['src/jq/jquery.js'], - //'dist/jq/jquery-ui.js': ['src/jq/jquery-ui.js'], 'dist/src/gridstack.scss': ['src/gridstack.scss'], 'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'], } @@ -58,14 +56,6 @@ module.exports = function(grunt) { files: { 'dist/jq/jquery.js': 'src/jq/jquery.js', 'dist/jq/jquery-ui.js': 'src/jq/jquery-ui.js', - /* - 'dist/jq/gridstack-dd-jqueryui.min.js': 'dist/jq/gridstack-dd-jqueryui.js', - 'dist/gridstack-dd.min.js': 'dist/gridstack-dd.js', - 'dist/gridstack-engine.min.js': 'dist/gridstack-engine.js', - 'dist/gridstack-poly.min.js': 'src/gridstack-poly.js', - 'dist/types.min.js': 'dist/types.js', - 'dist/utils.min.js': 'dist/utils.js', - */ } } }, diff --git a/README.md b/README.md index 3b9d5a754..9eb02f1b3 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ alternatively in html ```html - + ``` ## Basic usage @@ -127,7 +127,7 @@ see [jsfiddle sample](https://jsfiddle.net/adumesny/jqhkry7g) as running example ## Requirements -GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). All you need to include is `gridstack.all.js` and `gridstack.min.css` (layouts are done using CSS column based %). +GridStack no longer requires external dependencies as of v1.0.0 (lodash was removed in v0.5.0 and jquery API in v1.0.0). All you need to include is `gridstack-h5.js` and `gridstack.min.css` (layouts are done using CSS column based %). ## API Documentation @@ -262,7 +262,7 @@ Please use [jQuery UI Touch Punch](https://github.com/furf/jquery-ui-touch-punch working on touch-based devices. ```html - + ``` @@ -358,12 +358,11 @@ v2.x is a Typescript rewrite of 1.x, removing all jquery events, using classes a # jQuery Application -We're working on implementing HTML5 drag'n'drop through the plugin system. Right now it is still jquery-ui based. Because of that we are still bundling `jquery` (3.5.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) internally in `gridstack.all.js`. IFF your app needs to bring your own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your JQ libs. But note that there are issue with jQuery and ES6 import (see [1306](https://github.com/gridstack/gridstack.js/issues/1306)). +We now have a native HTML5 drag'n'drop through the plugin system (default), but the jquery-ui version can be used instead. It will bundle `jquery` (3.5.1) + `jquery-ui` (1.12.1 minimal drag|drop|resize) in `gridstack-jq.js`. IFF your app needs to bring your own version instead, you should **instead** include `gridstack-poly.min.js` (optional IE support) + `gridstack.min.js` + `gridstack.jQueryUI.min.js` after you import your JQ libs. But note that there are issue with jQuery and ES6 import (see [1306](https://github.com/gridstack/gridstack.js/issues/1306)). -Note: v2.0.0 does not currently support importing GridStack Drag&Drop without also including our jquery + jqueryui. Still trying to figure how to make that bundle possible. You will have to use 1.x - -As for events, you can still use `$(".grid-stack").on(...)` while jqueryui is used internally for things we don't support, but recommended you don't as that will get dropped at some point. +NOTE: v2.x / v3.0.0 does not currently support importing GridStack Drag&Drop without also including our jquery + jquery-ui. Still trying to figure how to make that bundle possible. You will have to use 1.x for now... +As for events, you can still use `$(".grid-stack").on(...)` for the version that uses jquery-ui for things we don't support. # Changes diff --git a/demo/advance-h5.html b/demo/advance-h5.html deleted file mode 100644 index f21d5905a..000000000 --- a/demo/advance-h5.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - Advanced grid demo - - - - - - - - - - - - - -

    Advanced Demo

    -
    -
    -
    -
    - -
    -
    - Drop here to remove! -
    -
    -
    -
    -
    - -
    -
    - Drag me in the dashboard! -
    -
    -
    -
    -
    -
    -
    -
    - - - - - \ No newline at end of file diff --git a/demo/advance.html b/demo/advance.html index 76cde9696..3fb8f0c6e 100644 --- a/demo/advance.html +++ b/demo/advance.html @@ -13,7 +13,7 @@ - + - - - -
    -

    Drag demo

    -

    -
    Manual
    -
    HTML5 D&D
    -
    - - - - - \ No newline at end of file diff --git a/demo/experiment/test2.html b/demo/experiment/test2.html deleted file mode 100644 index 7b3c95a69..000000000 --- a/demo/experiment/test2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - -

    Drag the W3Schools image into the rectangle:

    - -
    -
    - - - - \ No newline at end of file diff --git a/demo/float.html b/demo/float.html index 69ef2eb66..64f8b887e 100644 --- a/demo/float.html +++ b/demo/float.html @@ -7,7 +7,7 @@ Float grid demo - + diff --git a/demo/knockout.html b/demo/knockout.html index 2fdbb23a3..d31591aad 100644 --- a/demo/knockout.html +++ b/demo/knockout.html @@ -9,7 +9,7 @@ - +
    diff --git a/demo/locked.html b/demo/locked.html index 878555171..6af6ae0ee 100644 --- a/demo/locked.html +++ b/demo/locked.html @@ -7,7 +7,7 @@ Locked demo - + diff --git a/demo/nested.html b/demo/nested.html index b622dd3fa..2742e5ae8 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -7,7 +7,7 @@ Nested grids demo - + - +
    diff --git a/demo/serialization.html b/demo/serialization.html index c27e56d4f..bffadc764 100644 --- a/demo/serialization.html +++ b/demo/serialization.html @@ -7,7 +7,7 @@ Serialization demo - +
    diff --git a/demo/static.html b/demo/static.html index 52ab0f622..cac65ff44 100644 --- a/demo/static.html +++ b/demo/static.html @@ -7,7 +7,7 @@ Static Grid - + diff --git a/demo/two-h5.html b/demo/two-jq.html similarity index 99% rename from demo/two-h5.html rename to demo/two-jq.html index b4f3c8fe9..3ed4acba2 100644 --- a/demo/two-h5.html +++ b/demo/two-jq.html @@ -10,7 +10,7 @@ - + + + +
    +

    1 Row max should prevent dragging from outside to push down, only go to empty slot (until we have push right)

    + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + diff --git a/spec/gridstack-engine-spec.ts b/spec/gridstack-engine-spec.ts index 1350ef3a8..8628f6d09 100644 --- a/spec/gridstack-engine-spec.ts +++ b/spec/gridstack-engine-spec.ts @@ -1,14 +1,15 @@ import { GridStackEngine } from '../src/gridstack-engine'; +import { GridStackNode } from '../src/types'; describe('gridstack engine', function() { 'use strict'; - let engine; + let engine: GridStackEngine; // old hacky JS code that's not happy in TS. just cast to `any` and skip warnings let e: any = GridStackEngine; let w: any = window; let findNode = function(engine, id) { - return engine.nodes.find(function(i) { return i._id === id; }); + return engine.nodes.find(function(i) { return i.id === id; }); }; it('should exist setup function.', function() { @@ -19,24 +20,24 @@ describe('gridstack engine', function() { describe('test constructor', function() { it('should be setup properly', function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); expect(engine.column).toEqual(12); expect(engine.float).toEqual(false); - expect(engine.maxRow).toEqual(0); + expect(engine.maxRow).toEqual(undefined); expect(engine.nodes).toEqual([]); - expect(engine.onchange).toEqual(undefined); + expect(engine.onChange).toEqual(undefined); expect(engine.batchMode).toEqual(undefined); }); it('should set params correctly.', function() { let fkt = function() { }; let arr: any = [1,2,3]; - engine = new GridStackEngine(1, fkt, true, 2, arr); + engine = new GridStackEngine({column: 1, onChange:fkt, float:true, maxRow:2, nodes:arr}); expect(engine.column).toEqual(1); expect(engine.float).toBe(true); expect(engine.maxRow).toEqual(2); expect(engine.nodes).toEqual(arr); - expect(engine.onchange).toEqual(fkt); + expect(engine.onChange).toEqual(fkt); expect(engine.batchMode).toEqual(undefined); }); }); @@ -54,21 +55,21 @@ describe('gridstack engine', function() { describe('test prepareNode', function() { beforeAll(function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); }); it('should prepare a node', function() { - expect(engine.prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(engine.prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, h: 1})); - expect(engine.prepareNode({x: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(engine.prepareNode({y: 10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 10, h: 1})); - expect(engine.prepareNode({y: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({x: 10}, false)).toEqual(jasmine.objectContaining({x: 10, y: 0, h: 1})); + expect(engine.prepareNode({x: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({y: 10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 10, h: 1})); + expect(engine.prepareNode({y: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); expect(engine.prepareNode({w: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 3, h: 1})); expect(engine.prepareNode({w: 100}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, w: 12, h: 1})); - expect(engine.prepareNode({w: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(engine.prepareNode({w: -190}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(engine.prepareNode({h: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 3})); - expect(engine.prepareNode({h: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); - expect(engine.prepareNode({h: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({w: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({w: -190}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({h: 3}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 3})); + expect(engine.prepareNode({h: 0}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + expect(engine.prepareNode({h: -10}, false)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); expect(engine.prepareNode({x: 4, w: 10}, false)).toEqual(jasmine.objectContaining({x: 2, y: 0, w: 10, h: 1})); expect(engine.prepareNode({x: 4, w: 10}, true)).toEqual(jasmine.objectContaining({x: 4, y: 0, w: 8, h: 1})); }); @@ -123,7 +124,7 @@ describe('gridstack engine', function() { describe('test isAreaEmpty', function() { beforeAll(function() { - engine = new GridStackEngine(12, null, true); + engine = new GridStackEngine({float:true}); engine.nodes = [ engine.prepareNode({x: 3, y: 2, w: 3, h: 2}) ]; @@ -143,11 +144,11 @@ describe('gridstack engine', function() { describe('test cleanNodes/getDirtyNodes', function() { beforeAll(function() { - engine = new GridStackEngine(12, null, true); + engine = new GridStackEngine({float:true}); engine.nodes = [ - engine.prepareNode({x: 0, y: 0, idx: 1, _dirty: true}), - engine.prepareNode({x: 3, y: 2, w: 3, h: 2, idx: 2, _dirty: true}), - engine.prepareNode({x: 3, y: 7, w: 3, h: 2, idx: 3}) + engine.prepareNode({x: 0, y: 0, id: 1, _dirty: true}), + engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: 2, _dirty: true}), + engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: 3}) ]; }); @@ -158,8 +159,8 @@ describe('gridstack engine', function() { it('should return all dirty nodes', function() { let nodes = engine.getDirtyNodes(); expect(nodes.length).toEqual(2); - expect(nodes[0].idx).toEqual(1); - expect(nodes[1].idx).toEqual(2); + expect(nodes[0].id).toEqual(1); + expect(nodes[1].id).toEqual(2); }); it('should\'n clean nodes if batchMode true', function() { @@ -176,7 +177,7 @@ describe('gridstack engine', function() { describe('test batchUpdate/commit', function() { beforeAll(function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); }); it('should work on not float grids', function() { @@ -205,7 +206,7 @@ describe('gridstack engine', function() { describe('test batchUpdate/commit', function() { beforeAll(function() { - engine = new GridStackEngine(12, null, true); + engine = new GridStackEngine({float:true}); }); it('should work on float grids', function() { @@ -227,22 +228,22 @@ describe('gridstack engine', function() { callback: function() {} }; spyOn(spy, 'callback'); - engine = new GridStackEngine(12, spy.callback, true); + engine = new GridStackEngine({float:true, onChange: spy.callback}); engine.nodes = [ - engine.prepareNode({x: 0, y: 0, idx: 1, _dirty: true}), - engine.prepareNode({x: 3, y: 2, w: 3, h: 2, idx: 2, _dirty: true}), - engine.prepareNode({x: 3, y: 7, w: 3, h: 2, idx: 3}) + engine.prepareNode({x: 0, y: 0, id: 1, _dirty: true}), + engine.prepareNode({x: 3, y: 2, w: 3, h: 2, id: 2, _dirty: true}), + engine.prepareNode({x: 3, y: 7, w: 3, h: 2, id: 3}) ]; }); it('should\'n be called if batchMode true', function() { engine.batchMode = true; - engine._notify(); + (engine as any)._notify(); expect(spy.callback).not.toHaveBeenCalled(); }); it('should by called with dirty nodes', function() { - engine._notify(); + (engine as any)._notify(); expect(spy.callback).toHaveBeenCalledWith([ engine.nodes[0], engine.nodes[1] @@ -250,8 +251,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed', function() { - let n1 = {idx: -1}; - engine._notify(n1); + let n1 = {id: -1}; + (engine as any)._notify(n1); expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -260,8 +261,8 @@ describe('gridstack engine', function() { }); it('should by called with extra passed node to be removed and should maintain false parameter', function() { - let n1 = {idx: -1}; - engine._notify(n1, false); + let n1 = {id: -1}; + (engine as any)._notify(n1, false); expect(spy.callback).toHaveBeenCalledWith([ n1, engine.nodes[0], @@ -273,62 +274,62 @@ describe('gridstack engine', function() { describe('test _packNodes', function() { describe('using not float mode', function() { beforeEach(function() { - engine = new GridStackEngine(12, null, false); + engine = new GridStackEngine({float:false}); }); it('shouldn\'t pack one node with y coord eq 0', function() { engine.nodes = [ - {x: 0, y: 0, w:1, h:1,_id: 1}, + {x: 0, y: 0, w:1, h:1, id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); + (engine as any)._packNodes(); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, h: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); }); it('should pack one node correctly', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1,_id: 1}, + {x: 0, y: 1, w:1, h:1, id: 1}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + (engine as any)._packNodes(); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); }); it('should pack nodes correctly', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1,_id: 1}, - {x: 0, y: 5, w:1, h:1,_id: 2}, + {x: 0, y: 1, w:1, h:1, id: 1}, + {x: 0, y: 5, w:1, h:1, id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + (engine as any)._packNodes(); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); }); it('should pack nodes correctly', function() { engine.nodes = [ - {x: 0, y: 5, w:1, h:1,_id: 1}, - {x: 0, y: 1, w:1, h:1,_id: 2}, + {x: 0, y: 5, w:1, h:1, id: 1}, + {x: 0, y: 1, w:1, h:1, id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); + (engine as any)._packNodes(); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 0, _dirty: true})); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, _dirty: true})); }); it('should respect locked nodes', function() { engine.nodes = [ - {x: 0, y: 1, w:1, h:1,_id: 1, locked: true}, - {x: 0, y: 5, w:1, h:1,_id: 2}, + {x: 0, y: 1, w:1, h:1, id: 1, locked: true}, + {x: 0, y: 5, w:1, h:1, id: 2}, ]; - engine._packNodes(); - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, h: 1})); + (engine as any)._packNodes(); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, h: 1})); expect(findNode(engine, 1)._dirty).toBeFalsy(); - expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, _dirty: true})); + expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 0, y: 2, _dirty: true})); }); }); }); describe('test isNodeChangedPosition', function() { beforeAll(function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); }); it('should return true for changed x', function() { let widget = { x: 1, y: 2, w: 3, h: 4 }; @@ -354,19 +355,19 @@ describe('gridstack engine', function() { describe('test locked widget', function() { beforeAll(function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); }); it('should add widgets around locked one', function() { - let nodes = [ - {x: 0, y: 1, w: 12, h: 1, locked: 'yes', noMove: true, noResize: true, _id: 1}, - {x: 1, y: 0, w: 2, h: 3, _id: 2} + let nodes: GridStackNode[] = [ + {x: 0, y: 1, w: 12, h: 1, locked: true, noMove: true, noResize: true, id: 1}, + {x: 1, y: 0, w: 2, h: 3, id: 2} ]; // add locked item engine.addNode(nodes[0]) - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: 'yes'})); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); engine.addNode(nodes[1]) // add item that moves past locked one - expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: 'yes'})); + expect(findNode(engine, 1)).toEqual(jasmine.objectContaining({x: 0, y: 1, w: 12, h: 1, locked: true})); expect(findNode(engine, 2)).toEqual(jasmine.objectContaining({x: 1, y: 2})); // prevents moving locked item let node1 = findNode(engine, 1); @@ -382,7 +383,7 @@ describe('gridstack engine', function() { describe('test compact', function() { beforeAll(function() { - engine = new GridStackEngine(12); + engine = new GridStackEngine(); }); it('do nothing', function() { engine.compact(); diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 599d8a8a3..93039f86e 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -566,11 +566,11 @@ describe('gridstack', function() { it('willItFit()', function() { // default 4x2 and 4x4 so anything pushing more than 1 will fail let grid = GridStack.init({maxRow: 5}); - expect(grid.willItFit(0, 0, 1, 1, false)).toBe(true); - expect(grid.willItFit(0, 0, 1, 3, false)).toBe(true); - expect(grid.willItFit(0, 0, 1, 4, false)).toBe(false); - expect(grid.willItFit(0, 0, 12, 1, false)).toBe(true); - expect(grid.willItFit(0, 0, 12, 2, false)).toBe(false); + expect(grid.willItFit({x:0, y:0, w:1, h:1})).toBe(true); + expect(grid.willItFit({x:0, y:0, w:1, h:3})).toBe(true); + expect(grid.willItFit({x:0, y:0, w:1, h:4})).toBe(false); + expect(grid.willItFit({x:0, y:0, w:12, h:1})).toBe(true); + expect(grid.willItFit({x:0, y:0, w:12, h:2})).toBe(false); }); }); @@ -1774,6 +1774,11 @@ describe('gridstack', function() { afterEach(function() { document.body.removeChild(document.getElementById('gs-cont')); }); + it('willItFit() legacy', function() { + let grid = GridStack.init({maxRow: 5}); + expect((grid as any).willItFit(0, 0, 1, 3, false)).toBe(true); + expect((grid as any).willItFit(0, 0, 1, 4, false)).toBe(false); + }); /* saving as example it('warning if OLD setGridWidth is called', function() { let grid: any = GridStack.init(); diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index c320590d6..6359e7036 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -70,6 +70,9 @@ export abstract class GridStackDD extends GridStackDDI { /******************************************************************************** * GridStack code that is doing drag&drop extracted here so main class is smaller * for static grid that don't do any of this work anyway. Saves about 10k. + * TODO: no code hint in code below as this is so look at alternatives ? + * https://www.typescriptlang.org/docs/handbook/declaration-merging.html + * https://www.typescriptlang.org/docs/handbook/mixins.html ********************************************************************************/ /** @internal called to add drag over support to support widgets */ @@ -82,12 +85,18 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { let x = Math.max(0, pos.x); let y = Math.max(0, pos.y); if (!node._added) { - node._added = true; - - node.el = el; node.x = x; node.y = y; delete node.autoPosition; + + // don't accept *initial* location if doesn't fit #1419 (locked drop region, or can't grow), but maybe try if it will go somewhere + if (!this.engine.willItFit(node)) { + node.autoPosition = true; // ignore x,y and try for any slot... + if (!this.engine.willItFit(node)) return; // full grid or can't grow + } + node._added = true; + + node.el = el; this.engine.cleanNodes(); this.engine.beginUpdate(node); this.engine.addNode(node); @@ -178,6 +187,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { }) .on(this.el, 'drop', (event, el: GridItemHTMLElement, helper: GridItemHTMLElement) => { let node = el.gridstackNode; + let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419 // ignore drop on ourself from ourself - dragend will handle the simple move instead if (node && node.grid === this) { return false; } @@ -186,7 +196,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { // notify previous grid of removal let origNode = el._gridstackNodeOrig; delete el._gridstackNodeOrig; - if (origNode && origNode.grid && origNode.grid !== this) { + if (wasAdded && origNode && origNode.grid && origNode.grid !== this) { let oGrid = origNode.grid; oGrid.placeholder.remove(); origNode.el = el; // was using placeholder, have it point to node we've moved instead @@ -194,23 +204,29 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { oGrid._triggerRemoveEvent(); } - // use existing placeholder node as it's already in our list with drop location if (!node) { return false; } - const _id = node._id; - this.engine.cleanupNode(node); // removes all internal _xyz values (including the _id so add that back) - node._id = _id; - node.grid = this; + + // use existing placeholder node as it's already in our list with drop location + if (wasAdded) { + const _id = node._id; + this.engine.cleanupNode(node); // removes all internal _xyz values (including the _id so add that back) + node._id = _id; + node.grid = this; + } GridStackDD.get().off(el, 'drag'); // if we made a copy ('helper' which is temp) of the original node then insert a copy, else we move the original node (#1102) // as the helper will be nuked by jqueryui otherwise if (helper !== el) { helper.remove(); el.gridstackNode = origNode; // original item (left behind) is re-stored to pre dragging as the node now has drop info - el = el.cloneNode(true) as GridItemHTMLElement; + if (wasAdded) { + el = el.cloneNode(true) as GridItemHTMLElement; + } } else { el.remove(); // reduce flicker as we change depth here, and size further down GridStackDD.get().remove(el); } + if (!wasAdded) return false; el.gridstackNode = node; node.el = el; diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 07a813a3d..1f471bb59 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -11,6 +11,15 @@ import { GridStackNode, ColumnOptions, GridStackWidget } from './types'; export type onChangeCB = (nodes: GridStackNode[], removeDOM?: boolean) => void; +/** options used for creations - similar to GridStackOptions */ +export interface GridStackEngineOptions { + column?: number; + maxRow?: number; + float?: boolean; + nodes?: GridStackNode[]; + onChange?: onChangeCB; +} + /** * Defines the GridStack engine that does most no DOM grid manipulation. * See GridStack methods and vars for descriptions. @@ -21,7 +30,7 @@ export class GridStackEngine { public column: number; public maxRow: number; public nodes: GridStackNode[]; - public onchange: onChangeCB; + public onChange: onChangeCB; public addedNodes: GridStackNode[] = []; public removedNodes: GridStackNode[] = []; public batchMode: boolean; @@ -36,12 +45,12 @@ export class GridStackEngine { /** @internal */ private static _idSeq = 1; - public constructor(column = 12, onchange?: onChangeCB, float = false, maxRow = 0, nodes: GridStackNode[] = []) { - this.column = column; - this.onchange = onchange; - this._float = float; - this.maxRow = maxRow; - this.nodes = nodes; + public constructor(opts: GridStackEngineOptions = {}) { + this.column = opts.column || 12; + this.onChange = opts.onChange; + this._float = opts.float; + this.maxRow = opts.maxRow; + this.nodes = opts.nodes || []; } public batchUpdate(): GridStackEngine { @@ -278,8 +287,8 @@ export class GridStackEngine { if (this.batchMode) { return this } nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) ); let dirtyNodes = nodes.concat(this.getDirtyNodes()); - if (this.onchange) { - this.onchange(dirtyNodes, removeDOM); + if (this.onChange) { + this.onChange(dirtyNodes, removeDOM); } return this; } @@ -328,9 +337,8 @@ export class GridStackEngine { this.removedNodes.push(node); } node._id = null; // hint that node is being removed - // TODO: .splice(findIndex(),1) would be faster but apparently there are cases we have 2 instances ! (see spec 'load add new, delete others') - // this.nodes = this.nodes.filter(n => n !== node); - this.nodes.splice(this.nodes.findIndex(n => n === node), 1); + // don't use 'faster' .splice(findIndex(),1) in case node isn't in our list, or in multiple times. + this.nodes = this.nodes.filter(n => n !== node); if (!this.float) { this._packNodes(); } @@ -354,59 +362,54 @@ export class GridStackEngine { if (!this.isNodeChangedPosition(node, x, y, w, h)) { return false; } - let hasLocked = Boolean(this.nodes.find(n => n.locked)); + let hasLocked = this.nodes.some(n => n.locked); if (!this.maxRow && !hasLocked) { return true; } let clonedNode: GridStackNode; - let clone = new GridStackEngine( - this.column, - null, - this.float, - 0, - this.nodes.map(n => { + let clone = new GridStackEngine({ + column: this.column, + float: this.float, + nodes: this.nodes.map(n => { if (n === node) { clonedNode = {...n}; return clonedNode; } return {...n}; - })); + }) + }); - if (!clonedNode) {return true} + if (!clonedNode) return true; clone.moveNode(clonedNode, x, y, w, h); let canMove = true; if (hasLocked) { - canMove = canMove && !Boolean(clone.nodes.find(n => { - return n !== clonedNode && Boolean(n.locked) && Boolean(n._dirty); - })); + canMove = !clone.nodes.some(n => n.locked && n._dirty && n !== clonedNode); } - if (this.maxRow) { - canMove = canMove && (clone.getRow() <= this.maxRow); + if (this.maxRow && canMove) { + canMove = (clone.getRow() <= this.maxRow); } return canMove; } - public canBePlacedWithRespectToHeight(node: GridStackNode): boolean { - if (!this.maxRow) { - return true; - } + /** return true if can fit in grid height constrain only (always true if no maxRow) */ + public willItFit(node: GridStackNode): boolean { + if (!this.maxRow) return true; - let clone = new GridStackEngine( - this.column, - null, - this.float, - 0, - this.nodes.map(n => {return {...n}})); + let clone = new GridStackEngine({ + column: this.column, + float: this.float, + nodes: this.nodes.map(n => {return {...n}}) + }); clone.addNode(node); return clone.getRow() <= this.maxRow; } - public isNodeChangedPosition(node: GridStackNode, x: number, y: number, w: number, h: number): boolean { + public isNodeChangedPosition(node: GridStackNode, x: number, y: number, w?: number, h?: number): boolean { if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof w !== 'number') { w = node.w; } diff --git a/src/gridstack.ts b/src/gridstack.ts index c0044543d..6620597ea 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -291,19 +291,24 @@ export class GridStack { this._setStaticClass(); this._updateStyles(); - this.engine = new GridStackEngine(this.opts.column, (cbNodes, removeDOM = true) => { - let maxH = 0; - this.engine.nodes.forEach(n => { maxH = Math.max(maxH, n.y + n.h) }); - cbNodes.forEach(n => { - let el = n.el; - if (removeDOM && n._id === null) { - if (el && el.parentNode) { el.parentNode.removeChild(el) } - } else { - this._writeAttrs(el, n.x, n.y, n.w, n.h); - } - }); - this._updateStyles(false, maxH); // false = don't recreate, just append if need be - }, this.opts.float, this.opts.maxRow); + this.engine = new GridStackEngine({ + column: this.opts.column, + float: this.opts.float, + maxRow: this.opts.maxRow, + onChange: (cbNodes, removeDOM = true) => { + let maxH = 0; + this.engine.nodes.forEach(n => { maxH = Math.max(maxH, n.y + n.h) }); + cbNodes.forEach(n => { + let el = n.el; + if (removeDOM && n._id === null) { + if (el && el.parentNode) { el.parentNode.removeChild(el) } + } else { + this._writeAttrs(el, n.x, n.y, n.w, n.h); + } + }); + this._updateStyles(false, maxH); // false = don't recreate, just append if need be + } + }); if (this.opts.auto) { let elements: {el: HTMLElement; i: number}[] = []; @@ -341,7 +346,7 @@ export class GridStack { * add a new widget and returns it. * * Widget will be always placed even if result height is more than actual grid height. - * You need to use willItFit method before calling addWidget for additional check. + * You need to use `willItFit()` before calling addWidget for additional check. * See also `makeWidget()`. * * @example @@ -1071,24 +1076,27 @@ export class GridStack { public getMargin(): number { return this.opts.margin as number; } /** - * Returns true if the height of the grid will be less the vertical + * Returns true if the height of the grid will be less than the vertical * constraint. Always returns true if grid doesn't have height constraint. - * @param x new position x. If value is null or undefined it will be ignored. - * @param y new position y. If value is null or undefined it will be ignored. - * @param w new dimensions width. If value is null or undefined it will be ignored. - * @param h new dimensions height. If value is null or undefined it will be ignored. - * @param autoPosition if true then x, y parameters will be ignored and widget - * will be places on the first available position + * @param node contains x,y,w,h,auto-position options * * @example - * if (grid.willItFit(newNode.x, newNode.y, newNode.w, newNode.h, newNode.autoPosition)) { - * grid.addWidget(newNode); + * if (grid.willItFit(newWidget)) { + * grid.addWidget(newWidget); * } else { * alert('Not enough free space to place the widget'); * } */ - public willItFit(x: number, y: number, w: number, h: number, autoPosition: boolean): boolean { - return this.engine.canBePlacedWithRespectToHeight({x, y, w, h, autoPosition}); + public willItFit(node: GridStackWidget): boolean { + // support legacy call for now + if (arguments.length > 1) { + console.warn('gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon'); + // eslint-disable-next-line prefer-rest-params + let a = arguments, i = 0, + w: GridStackWidget = { x:a[i++], y:a[i++], w:a[i++], h:a[i++], autoPosition:a[i++] }; + return this.willItFit(w); + } + return this.engine.willItFit(node); } /** @internal */ @@ -1276,7 +1284,7 @@ export class GridStack { if (!node) return this; this._writeAttrs(el, node.x, node.y, node.w, node.h); - let attrs /*: GridStackWidget*/ = { // remaining attributes + let attrs /*: like GridStackWidget but strings */ = { // remaining attributes autoPosition: 'gs-auto-position', minW: 'gs-min-w', minH: 'gs-min-h', From 64a826487ded89930635e00c7aeaa5768bdf6064 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 6 Dec 2020 07:07:37 -0800 Subject: [PATCH 0355/1298] h5: fix to restoring resize properties * we were incorrectly restoring el properties in _cleanHelper() (found whiledebugging code) * added missing types --- src/h5/dd-resizable.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index c0a047ec5..8447fd34a 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -38,10 +38,10 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt private temporalRect: Rect; /** @internal */ private startEvent: MouseEvent; + /** @internal value saved in the same order as _originStyleProp[] */ + private elOriginStyleVal: string[]; /** @internal */ - private elOriginStyle; - /** @internal */ - private parentOriginStylePosition; + private parentOriginStylePosition: string; /** @internal */ private static _originStyleProp = ['width', 'height', 'position', 'left', 'top', 'opacity', 'zIndex']; @@ -193,7 +193,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _setupHelper(): DDResizable { - this.elOriginStyle = DDResizable._originStyleProp.map(prop => this.el.style[prop]); + this.elOriginStyleVal = DDResizable._originStyleProp.map(prop => this.el.style[prop]); this.parentOriginStylePosition = this.el.parentElement.style.position; if (window.getComputedStyle(this.el.parentElement).position.match(/static/)) { this.el.parentElement.style.position = 'relative'; @@ -206,8 +206,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _cleanHelper(): DDResizable { - DDResizable._originStyleProp.forEach(prop => { - this.el.style[prop] = this.elOriginStyle[prop] || null; + DDResizable._originStyleProp.forEach((prop, i) => { + this.el.style[prop] = this.elOriginStyleVal[i] || null; }); this.el.parentElement.style.position = this.parentOriginStylePosition || null; return this; From 1686d9d1362dfc2671b872cca877d184f7dc59d9 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 6 Dec 2020 08:56:31 -0800 Subject: [PATCH 0356/1298] W side resize and maxW fix fix #1330 * we now set maxWidth/maxHeight to prevent grid item from resizing past their size * fixed code to prevent item from moving left when they reach max width * added sample test case --- doc/CHANGES.md | 1 + spec/e2e/html/1330-maxw-left-resize.html | 21 ++++++++++++++++++ src/gridstack-dd.ts | 27 +++++++++++++----------- src/h5/dd-resizable.ts | 7 +++--- 4 files changed, 41 insertions(+), 15 deletions(-) create mode 100644 spec/e2e/html/1330-maxw-left-resize.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 0985c29f2..d01965ea2 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -46,6 +46,7 @@ Change log ## 3.1.0-dev - fix [1419](https://github.com/gridstack/gridstack.js/issues/1419) dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) +- fix [1330](https://github.com/gridstack/gridstack.js/issues/1330) `maxW` does not work as intended with resizable handle `"w"` ## 3.1.0 (2020-12-4) diff --git a/spec/e2e/html/1330-maxw-left-resize.html b/spec/e2e/html/1330-maxw-left-resize.html new file mode 100644 index 000000000..a04e2ce41 --- /dev/null +++ b/spec/e2e/html/1330-maxw-left-resize.html @@ -0,0 +1,21 @@ + + + + + resize maxW + + + + +
    +

    resize to left with maxW set

    +
    +
    + + + + diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 6359e7036..2f6fb9e08 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -21,7 +21,7 @@ export type DDDropOpt = { /** drag&drop options currently called from the main code, but others can be passed in grid options */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export type DDOpts = 'enable' | 'disable' | 'destroy' | 'option' | string | any; -export type DDKey = 'minWidth' | 'minHeight'; +export type DDKey = 'minWidth' | 'minHeight' | 'maxWidth' | 'maxHeight'; export type DDValue = number | string; /** drag&drop events callbacks */ @@ -373,14 +373,21 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid GridStackDD.get().resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1)); GridStackDD.get().resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1)); + // also set max if set #1330 + if (node.maxW) { + GridStackDD.get().resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); + } + if (node.maxH) { + GridStackDD.get().resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); + } } /** called when item is being dragged/resized */ let dragOrResize = (event: Event, ui: DDUIData): void => { let x = Math.round(ui.position.left / cellWidth); let y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); - let w; - let h; + let w: number; + let h: number; if (event.type === 'drag') { let distance = ui.position.top - node._prevYPix; @@ -388,7 +395,7 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid Utils.updateScrollPosition(el, ui.position, distance); // if inTrash, outside of the bounds or added to another grid (#393) temporarily remove it from us if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || (!this.engine.float && y > this.engine.getRow()) || node._added) { - if (node._temporaryRemoved) { return; } + if (node._temporaryRemoved) return; if (this.opts.removable === true) { this._setupRemovingTimeout(el); } @@ -415,19 +422,15 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid delete node._temporaryRemoved; } } + if (node._lastTriedX === x && node._lastTriedY === y) return; } else if (event.type === 'resize') { if (x < 0) return; w = Math.round(ui.size.width / cellWidth); h = Math.round(ui.size.height / cellHeight); + if (w === node.w && h === node.h) return; } - // width and height are undefined if not resizing - let _lastTriedW = (w || node._lastTriedW); - let _lastTriedH = (h || node._lastTriedH); - if (!this.engine.canMoveNode(node, x, y, w, h) || - (node._lastTriedX === x && node._lastTriedY === y && - node._lastTriedW === _lastTriedW && node._lastTriedH === _lastTriedH)) { - return; - } + + if (!this.engine.canMoveNode(node, x, y, w, h)) return; node._lastTriedX = x; node._lastTriedY = y; node._lastTriedW = w; diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 8447fd34a..d9b348051 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -242,13 +242,13 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt const reshape = this._getReShapeSize(newRect.width, newRect.height); if (newRect.width !== reshape.width) { if (dir.indexOf('w') > -1) { - newRect.left += reshape.width - newRect.width; + newRect.left += newRect.width - reshape.width; } newRect.width = reshape.width; } if (newRect.height !== reshape.height) { if (dir.indexOf('n') > -1) { - newRect.top += reshape.height - newRect.height; + newRect.top += newRect.height - reshape.height; } newRect.height = reshape.height; } @@ -274,7 +274,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt const { left, top } = containmentEl.getBoundingClientRect(); containmentRect = { left, top, width: 0, height: 0 }; } - Object.keys(this.temporalRect || this.originalRect).forEach(key => { + if (!this.temporalRect) return this; + Object.keys(this.temporalRect).forEach(key => { const value = this.temporalRect[key]; this.el.style[key] = value - containmentRect[key] + 'px'; }); From 8d13204c6cbec16aad91745eca4aae7d11b79ba9 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 6 Dec 2020 09:36:16 -0800 Subject: [PATCH 0357/1298] support all options for new dragged in widgets * fix #1472 * dragEnter now loads all widget attributes if we don't have a node (dragged from toolbar) --- demo/two.html | 6 ++---- doc/CHANGES.md | 5 +++++ src/gridstack-dd.ts | 13 +++++-------- src/gridstack.ts | 3 ++- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/demo/two.html b/demo/two.html index a2955e8d5..ad5c9f656 100644 --- a/demo/two.html +++ b/demo/two.html @@ -50,16 +50,14 @@

    Two grids demo

    diff --git a/doc/CHANGES.md b/doc/CHANGES.md index d01965ea2..b69803772 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -46,7 +46,12 @@ Change log ## 3.1.0-dev - fix [1419](https://github.com/gridstack/gridstack.js/issues/1419) dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) +-- **possible BREAK** (unlikely you use engine directly) +* engine constructor takes Options struct rather than spelling arguments (easier to extend/use) +* `canBePlacedWithRespectToHeight()` -> `willItFit()` like grid method + - fix [1330](https://github.com/gridstack/gridstack.js/issues/1330) `maxW` does not work as intended with resizable handle `"w"` +- fix [1472](https://github.com/gridstack/gridstack.js/issues/1472) support all options for new dragged in widgets (read all `gs-xyz` attributes) ## 3.1.0 (2020-12-4) diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 2f6fb9e08..9d583924d 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -130,18 +130,15 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { }) .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { // ignore drop enter on ourself, and prevent parent from receiving event - let node = el.gridstackNode || {}; - if (node.grid === this) { + let node = el.gridstackNode; + if (node && node.grid === this) { delete node._added; // reset this to track placeholder again in case we were over other grid #1484 (dropout doesn't always clear) return false; } - // see if we already have a node with widget/height and check for attributes - if (el.getAttribute && (!node.w || !node.h)) { - let w = parseInt(el.getAttribute('gs-w')); - if (w > 0) { node.w = w; } - let h = parseInt(el.getAttribute('gs-h')); - if (h > 0) { node.h = h; } + // load any element attributes if we don't have a node + if (!node) { + node = this._readAttr(el); } // if the item came from another grid, let it know it was added here to removed duplicate shadow #393 diff --git a/src/gridstack.ts b/src/gridstack.ts index 6620597ea..004463a14 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1307,7 +1307,8 @@ export class GridStack { } /** @internal call to read any default attributes from element */ - private _readAttr(el: HTMLElement, node: GridStackNode = {}): GridStackWidget { + private _readAttr(el: HTMLElement): GridStackWidget { + let node: GridStackNode = {}; node.x = Utils.toNumber(el.getAttribute('gs-x')); node.y = Utils.toNumber(el.getAttribute('gs-y')); node.w = Utils.toNumber(el.getAttribute('gs-w')); From 288f34a3abf70a85140f6fb7c1b58c310a81dc30 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 6 Dec 2020 21:50:07 -0800 Subject: [PATCH 0358/1298] h5: drag fix * fix #1511 * you can now click any grid item content and drag away * added sample test case --- doc/CHANGES.md | 1 + spec/e2e/html/1511-drag-any-content.html | 38 ++++++++++++++++++++++++ src/h5/dd-draggable.ts | 18 +++++------ 3 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 spec/e2e/html/1511-drag-any-content.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index b69803772..9ba2a047c 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -52,6 +52,7 @@ Change log - fix [1330](https://github.com/gridstack/gridstack.js/issues/1330) `maxW` does not work as intended with resizable handle `"w"` - fix [1472](https://github.com/gridstack/gridstack.js/issues/1472) support all options for new dragged in widgets (read all `gs-xyz` attributes) +- fix [1511](https://github.com/gridstack/gridstack.js/issues/1511) dragging any grid item content works ## 3.1.0 (2020-12-4) diff --git a/spec/e2e/html/1511-drag-any-content.html b/spec/e2e/html/1511-drag-any-content.html new file mode 100644 index 000000000..0bbeda438 --- /dev/null +++ b/spec/e2e/html/1511-drag-any-content.html @@ -0,0 +1,38 @@ + + + + + + + Float grid demo + + + + + + +
    +

    Float grid demo

    +

    +
    +
    + + + + diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 4451c6d79..c32deff11 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -121,22 +121,18 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt return this; } - /** @internal */ + /** @internal call when mouse goes down before a dragstart happens */ private _mouseDown(event: MouseEvent): void { - this.mouseDownElement = event.target as HTMLElement; + // make sure we are clicking on a drag handle or child of it... + let className = this.option.handle.substring(1); + let el = event.target as HTMLElement; + while (el && !el.classList.contains(className)) { el = el.parentElement; } + this.mouseDownElement = el; } /** @internal */ private _dragStart(event: DragEvent): void { - if (this.option.handle && !( - this.mouseDownElement - && this.mouseDownElement.matches( - `${this.option.handle}, ${this.option.handle} > *` - ) - )) { - event.preventDefault(); - return; - } + if (!this.mouseDownElement) { event.preventDefault(); return; } DDManager.dragElement = this; this.helper = this._createHelper(event); this._setupHelperContainmentStyle(); From 991e907a3bd79004952f0c206940dc51f6878fdd Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 7 Dec 2020 08:26:58 -0800 Subject: [PATCH 0359/1298] load() DOM order fix * make sure to insert not append on load() since we reserves sort so ODM order matches visual order. --- src/gridstack.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index 004463a14..0bb768eb8 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -210,6 +210,8 @@ export class GridStack { private _isAutoCellHeight: boolean; /** @internal track event binding to window resize so we can remove */ private _windowResizeBind: () => GridStack; + /** @internal true when loading items to insert first rather than append */ + private _insertNotAppend: boolean; /** * Construct a grid item from the given element and options @@ -397,7 +399,11 @@ export class GridStack { this.engine.prepareNode(options); this._writeAttr(el, options); - this.el.appendChild(el); + if (this._insertNotAppend) { + this.el.prepend(el); + } else { + this.el.appendChild(el); + } // similar to makeWidget() that doesn't read attr again and worse re-create a new node and loose any _id this._prepareElement(el, true, options); @@ -467,6 +473,7 @@ export class GridStack { **/ public load(layout: GridStackWidget[], addAndRemove: boolean | ((g: GridStack, w: GridStackWidget, add: boolean) => GridItemHTMLElement) = true): GridStack { let items = GridStack.Utils.sort(layout, -1, this._prevColumn || this.opts.column); + this._insertNotAppend = true; // since create in reverse order... // if we're loading a layout into 1 column (_prevColumn is set only when going to 1) and items don't fit, make sure to save // the original wanted layout so we can scale back up correctly #1471 @@ -503,6 +510,7 @@ export class GridStack { let sub = item.el.querySelector('.grid-stack') as GridHTMLElement; if (sub && sub.gridstack) { sub.gridstack.load((w.subGrid as GridStackOptions).children); // TODO: support updating grid options ? + this._insertNotAppend = true; // got reset by above call } } } else if (addAndRemove) { @@ -523,7 +531,7 @@ export class GridStack { // after commit, clear that flag delete this._ignoreLayoutsNodeChange; - + delete this._insertNotAppend; return this; } From e1f5696e7f6091a3f9b33eba54de530cfa466ef4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 7 Dec 2020 09:33:31 -0800 Subject: [PATCH 0360/1298] web component fixes * fix #1438 * make sure we handle grid size 0 when initializing things, or we don' create CSS and bad things happen. Also avoid oneColumnMode when no size. * added webcomponent example (more for debugging than anything) --- demo/index.html | 3 ++- demo/web-comp.html | 32 ++++++++++++++++++++++++++++++++ doc/CHANGES.md | 1 + src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 12 +++++++----- 6 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 demo/web-comp.html diff --git a/demo/index.html b/demo/index.html index d80570be9..a47b5fa53 100644 --- a/demo/index.html +++ b/demo/index.html @@ -19,8 +19,9 @@

    Demos

  • Serialization
  • Static
  • Two grids
  • -
  • Vue2.js
  • Vue3.js
  • +
  • Vue2.js
  • +
  • Web Component
  • diff --git a/demo/web-comp.html b/demo/web-comp.html new file mode 100644 index 000000000..328c45108 --- /dev/null +++ b/demo/web-comp.html @@ -0,0 +1,32 @@ + + + Web Component demo + + + + + + +

    LitElement Web Component

    + + + + + + + \ No newline at end of file diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 9ba2a047c..d27f55abe 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -53,6 +53,7 @@ Change log - fix [1330](https://github.com/gridstack/gridstack.js/issues/1330) `maxW` does not work as intended with resizable handle `"w"` - fix [1472](https://github.com/gridstack/gridstack.js/issues/1472) support all options for new dragged in widgets (read all `gs-xyz` attributes) - fix [1511](https://github.com/gridstack/gridstack.js/issues/1511) dragging any grid item content works +- fix [1438](https://github.com/gridstack/gridstack.js/issues/1438) web-component fixes & grid with 0 size initially. ## 3.1.0 (2020-12-4) diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index eee82235a..4b0c2ca66 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 2.0.0 extra CSS for [2-11] columns (non default) + * gridstack 3.1.0-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 59902a8db..df7bf73c4 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 2.1.0 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.0-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 0bb768eb8..3c85fd5e5 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -291,7 +291,6 @@ export class GridStack { this.el.classList.add(this.opts._styleSheetClass); this._setStaticClass(); - this._updateStyles(); this.engine = new GridStackEngine({ column: this.opts.column, @@ -336,7 +335,7 @@ export class GridStack { this.placeholder.classList.add(this.opts.placeholderClass, defaults.itemClass, this.opts.itemClass); this.placeholder.appendChild(placeholderChild); - this._updateContainerHeight(); + this._updateStyles(); this._setupDragIn(); this._setupRemoveDrop(); @@ -588,7 +587,8 @@ export class GridStack { * Gets current cell width. */ public cellWidth(): number { - return this.el.offsetWidth / this.opts.column; + // use parent width if we're 0 (no size yet) + return (this.el.offsetWidth || this.el.parentElement.offsetWidth || window.innerWidth) / this.opts.column; } /** @@ -1171,7 +1171,9 @@ export class GridStack { } this._updateContainerHeight(); - if (!this.opts.cellHeight) { // The rest will be handled by CSS TODO: I don't understand this usage + + // if user is telling us they will handle the CSS themselves by setting heights to 0. Do we need this opts really ?? + if (this.opts.cellHeight === 0) { return this; } @@ -1363,7 +1365,7 @@ export class GridStack { * and remember the prev columns we used, as well as check for auto cell height (square) */ public onParentResize(): GridStack { - if (!this.el) {return} // return if we're gone + if (!this.el || !this.el.clientWidth) return; // return if we're gone or no size yet (will get called again) // make the cells content (minus margin) square again if (this._isAutoCellHeight) { From 3f15b879b9ae17834ac2ab68bb0061e2e3892dd2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 7 Dec 2020 17:54:56 -0800 Subject: [PATCH 0361/1298] v3.1.1 --- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- webpack.config.js | 4 ++-- 24 files changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index d27f55abe..692775867 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.0-dev](#310-dev) +- [3.1.1 (2020-12-7)](#311-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) - [2.2.0 (2020-11-7)](#220-2020-11-7) @@ -43,7 +43,7 @@ Change log -## 3.1.0-dev +## 3.1.1 (2020-12-7) - fix [1419](https://github.com/gridstack/gridstack.js/issues/1419) dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) -- **possible BREAK** (unlikely you use engine directly) diff --git a/package.json b/package.json index 81a7d81f0..7d8f05f4f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.0-dev", + "version": "3.1.1", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 9d583924d..7f1756d4a 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.0-dev @preserve +// gridstack-GridStackDD.get().ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 39e693c0c..e5c9bc930 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.0-dev @preserve +// gridstack-ddi.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 1f471bb59..b06f3e089 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.0-dev @preserve +// gridstack-engine.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 4b0c2ca66..5485e7357 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.0-dev extra CSS for [2-11] columns (non default) + * gridstack 3.1.1 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index df7bf73c4..f85fd5bbd 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.0-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.1 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 3c85fd5e5..7cfa5dd27 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.0-dev @preserve +// gridstack.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 45f005e52..5e4d9f6ce 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.0-dev @preserve +// dd-base-impl.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index c32deff11..1268ec985 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.0-dev @preserve +// dd-draggable.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index c56225f5b..4e8ccb5ca 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.0-dev @preserve +// dd-droppable.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index b532a21f4..40b395256 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.0-dev @preserve +// dd-elements.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 2cd949774..60e110e45 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.0-dev @preserve +// dd-manager.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 6affac538..06ec85165 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.0-dev @preserve +// dd-resizable-handle.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index d9b348051..7e4d2b90e 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.0-dev @preserve +// dd-resizable.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index aaeae92ce..32b0c244f 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.0-dev @preserve +// dd-utils.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 37398bf1c..ecd3cc9ee 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.0-dev @preserve +// gridstack-dd-native.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index d8f4543de..748af3736 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.0-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.1 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index eeec9fcdf..55b2e0075 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.0-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.1 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 9d746d1d0..f2e474789 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.0-dev - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.1 - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 5ecafcfcc..c3ecf21e7 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 3.1.0-dev @preserve +// gridstack-dd-jqueryui.ts 3.1.1 @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index 546c6388d..58c2f0b2d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.0-dev @preserve +// types.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index d2f6d81db..90648604a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.0-dev @preserve +// utils.ts 3.1.1 @preserve /** * https://gridstackjs.com/ diff --git a/webpack.config.js b/webpack.config.js index 3ee891df0..df8799654 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,8 +7,8 @@ module.exports = { 'gridstack-static': './src/index-static.ts' }, mode: 'production', // production vs development - devtool: 'source-map', - // devtool: 'eval-source-map', // for best (large .js) debugging. see https://survivejs.com/webpack/building/source-maps/ + // devtool: 'source-map', + devtool: 'eval-source-map', // for best (large .js) debugging. see https://survivejs.com/webpack/building/source-maps/ module: { rules: [ { From be1c4c8329c954bf7aa01eab256b97a41faba814 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 7 Dec 2020 18:07:17 -0800 Subject: [PATCH 0362/1298] build size fix --- webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index df8799654..3ee891df0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -7,8 +7,8 @@ module.exports = { 'gridstack-static': './src/index-static.ts' }, mode: 'production', // production vs development - // devtool: 'source-map', - devtool: 'eval-source-map', // for best (large .js) debugging. see https://survivejs.com/webpack/building/source-maps/ + devtool: 'source-map', + // devtool: 'eval-source-map', // for best (large .js) debugging. see https://survivejs.com/webpack/building/source-maps/ module: { rules: [ { From 9444caf17729e5ef9d3ea76f134330112c6466b2 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 7 Dec 2020 18:11:12 -0800 Subject: [PATCH 0363/1298] v3.1.2 --- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 692775867..d7533b8db 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.1 (2020-12-7)](#311-2020-12-7) +- [3.1.2 (2020-12-7)](#311-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) - [2.2.0 (2020-11-7)](#220-2020-11-7) @@ -43,7 +43,7 @@ Change log -## 3.1.1 (2020-12-7) +## 3.1.2 (2020-12-7) - fix [1419](https://github.com/gridstack/gridstack.js/issues/1419) dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) -- **possible BREAK** (unlikely you use engine directly) diff --git a/package.json b/package.json index 7d8f05f4f..9cd2fc200 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.1", + "version": "3.1.2", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 7f1756d4a..18b0d4520 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.1 @preserve +// gridstack-GridStackDD.get().ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index e5c9bc930..cd8e7d9b7 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.1 @preserve +// gridstack-ddi.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index b06f3e089..a8aa03bcf 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.1 @preserve +// gridstack-engine.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 5485e7357..14aeb41dc 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.1 extra CSS for [2-11] columns (non default) + * gridstack 3.1.2 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index f85fd5bbd..0e7e166cf 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.1 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.2 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 7cfa5dd27..8bdd28d4f 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.1 @preserve +// gridstack.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 5e4d9f6ce..02f82a1c6 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.1 @preserve +// dd-base-impl.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 1268ec985..296f69485 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.1 @preserve +// dd-draggable.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 4e8ccb5ca..26987c4b1 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.1 @preserve +// dd-droppable.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index 40b395256..b9b83a41f 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.1 @preserve +// dd-elements.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 60e110e45..822c35abf 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.1 @preserve +// dd-manager.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 06ec85165..e9d819f4d 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.1 @preserve +// dd-resizable-handle.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 7e4d2b90e..d0728422b 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.1 @preserve +// dd-resizable.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 32b0c244f..622252c7b 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.1 @preserve +// dd-utils.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index ecd3cc9ee..bcf25af3f 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.1 @preserve +// gridstack-dd-native.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index 748af3736..d1b9d618b 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.1 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.2 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index 55b2e0075..5e544572d 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.1 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.2 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index f2e474789..8ec356207 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.1 - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.2 - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index c3ecf21e7..fffe1b30c 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 3.1.1 @preserve +// gridstack-dd-jqueryui.ts 3.1.2 @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index 58c2f0b2d..9568dd95c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.1 @preserve +// types.ts 3.1.2 @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index 90648604a..a2f0ecfa7 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.1 @preserve +// utils.ts 3.1.2 @preserve /** * https://gridstackjs.com/ From 565b31a9a6f33960c24d64c13213cb05f061a781 Mon Sep 17 00:00:00 2001 From: Carlos Herrero Date: Wed, 9 Dec 2020 14:20:37 +0100 Subject: [PATCH 0364/1298] Resizing issue --- src/gridstack-dd.ts | 12 ++++++++++++ src/h5/dd-resizable.ts | 26 +++++++++++++++++++++----- src/utils.ts | 22 ++++++++++++++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 9d583924d..9dac317c1 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -342,6 +342,7 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth: number; let cellHeight: number; + let minRow: number; /** called when item starts moving/resizing */ let onStartMoving = (event: Event, ui: DDUIData): void => { @@ -352,6 +353,11 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this._gsEventHandler[event.type](event, target); } + // Saving `minRow` and adding new ones for resizing + minRow = this.opts.minRow; + this.opts.minRow = this.getRow() + 100; + this._updateContainerHeight(); + this.engine.cleanNodes(); this.engine.beginUpdate(node); cellWidth = this.cellWidth(); @@ -422,6 +428,8 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid if (node._lastTriedX === x && node._lastTriedY === y) return; } else if (event.type === 'resize') { if (x < 0) return; + // Scrolling page if needed + Utils.updateScrollResize(event as MouseEvent, el, cellHeight); w = Math.round(ui.size.width / cellWidth); h = Math.round(ui.size.height / cellHeight); if (w === node.w && h === node.h) return; @@ -483,6 +491,10 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this.engine.endUpdate(); + // Removing lines rows added on `resizestart` + this.opts.minRow = minRow; + this._updateContainerHeight(); + // if we re-sized a nested grid item, let the children resize as well if (event.type === 'resizestop') { this._resizeNestedGrids(target); diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index d9b348051..959f75db4 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -8,6 +8,7 @@ import { DDResizableHandle } from './dd-resizable-handle'; import { DDBaseImplement, HTMLElementExtendOpt } from './dd-base-impl'; import { DDUtils } from './dd-utils'; +import { Utils } from '../utils'; import { DDUIData, Rect, Size } from '../types'; // TODO: merge with DDDragOpt @@ -37,6 +38,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private temporalRect: Rect; /** @internal */ + private scrollY: number; + /** @internal */ private startEvent: MouseEvent; /** @internal value saved in the same order as _originStyleProp[] */ private elOriginStyleVal: string[]; @@ -152,6 +155,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _resizeStart(event: MouseEvent): DDResizable { this.originalRect = this.el.getBoundingClientRect(); + const scrollEl = Utils.getScrollParent(this.el); + this.scrollY = scrollEl === null ? 0 : scrollEl.scrollTop; this.startEvent = event; this._setupHelper(); this._applyChange(); @@ -188,6 +193,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt delete this.startEvent; delete this.originalRect; delete this.temporalRect; + delete this.scrollY; return this; } @@ -216,12 +222,15 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _getChange(event: MouseEvent, dir: string): Rect { const oEvent = this.startEvent; + const scrollEl = Utils.getScrollParent(this.el); + const scrolled = scrollEl === null ? 0 : (scrollEl.scrollTop - this.scrollY); const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out. width: this.originalRect.width, - height: this.originalRect.height, + height: this.originalRect.height + scrolled, left: this.originalRect.left, - top: this.originalRect.top + top: this.originalRect.top - scrolled }; + const offsetH = event.clientX - oEvent.clientX; const offsetV = event.clientY - oEvent.clientY; @@ -291,9 +300,16 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _ui = (): DDUIData => { - const containmentEl = this.el.parentElement; - const containmentRect = containmentEl.getBoundingClientRect(); - const rect = this.temporalRect || this.originalRect; + const scrollEl = Utils.getScrollParent(this.el); + const scrolled = scrollEl === null ? 0 : (scrollEl.scrollTop - this.scrollY); + const containmentRect = this.el.parentElement.getBoundingClientRect(); + const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out. + width: this.originalRect.width, + height: this.originalRect.height + scrolled, + left: this.originalRect.left, + top: this.originalRect.top - scrolled + }; + const rect = this.temporalRect || newRect; return { position: { left: rect.left - containmentRect.left, diff --git a/src/utils.ts b/src/utils.ts index d2f6d81db..8b464364d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -327,5 +327,27 @@ export class Utils { } } } + + /** @internal */ + static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void { + let scrollEl = this.getScrollParent(el); + if (scrollEl === null) return; + + //const width = scrollEl.clientWidth; + const height = scrollEl.clientHeight; + + const top = event.clientY < distance; + const bottom = event.clientY > height - distance; + + if (top) { + // This also can be done with a timeout to keep scrolling while the mouse is + // in the scrolling zone. (will have smoother behavior) + scrollEl.scrollBy({ behavior: 'smooth', top: event.clientY - distance}); + } + + if (bottom) { + scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - event.clientY)}); + } + } } From cc6d1023ea2dfa4cbfbdd1f3d113567db2f06bf8 Mon Sep 17 00:00:00 2001 From: Zach Smith Date: Thu, 10 Dec 2020 18:01:11 +0200 Subject: [PATCH 0365/1298] Added example using a controlled React component and hooks. #735 (#1531) * Added example using a controlled React component and hooks. #735 * Updated in response to feedback on #1531 * Fixed state-management bug where old state values were set instead of new state values Co-authored-by: Zach Smith --- demo/index.html | 1 + demo/react-hooks.html | 189 ++++++++++++++++++++++++++++++++++++++++++ doc/CHANGES.md | 2 +- 3 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 demo/react-hooks.html diff --git a/demo/index.html b/demo/index.html index a47b5fa53..e30649bd0 100644 --- a/demo/index.html +++ b/demo/index.html @@ -15,6 +15,7 @@

    Demos

  • Nested grids
  • Responsive
  • ReactJS
  • +
  • ReactJS (Hooks)
  • Right-To-Left (RTL)
  • Serialization
  • Static
  • diff --git a/demo/react-hooks.html b/demo/react-hooks.html new file mode 100644 index 000000000..e3c8e6fd9 --- /dev/null +++ b/demo/react-hooks.html @@ -0,0 +1,189 @@ + + + + + + + Gridstack.js React integration example + + + + + + + + + + +
    +

    Using GridStack.js with React hooks

    +

    + As with any virtualDOM-based framework, you need to check if Reacthas rendered the DOM (or any updates to it) + before you initialize GridStack or call its methods. This example shows how to make rendered + components widgets: +

    +
      +
    1. Render items, each with a reference
    2. +
    3. Convert each rendered item to a widget using the reference and the + makeWidget function
    4. +
    +
    +
    +

    Controlled stack

    +
    +
    +
    +

    Uncontrolled stack

    +
    +
    + + + + + \ No newline at end of file diff --git a/doc/CHANGES.md b/doc/CHANGES.md index d7533b8db..831d950ed 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.2 (2020-12-7)](#311-2020-12-7) +- [3.1.2 (2020-12-7)](#312-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) - [2.2.0 (2020-11-7)](#220-2020-11-7) From f0a480bfd1f5b68c47a486f085cfe9f24bacdb75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Dec 2020 03:47:17 +0000 Subject: [PATCH 0366/1298] Bump ini from 1.3.5 to 1.3.7 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a2df2444b..b12b752c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3248,9 +3248,9 @@ inherits@2.0.3: integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== inline-source-map@~0.6.0: version "0.6.2" From 8ed5552ec96b01a9b09df7f82167221fa50d7c60 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 14 Dec 2020 00:01:33 -0800 Subject: [PATCH 0367/1298] 3.1.2-dev --- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index 9cd2fc200..d5481d72b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.2", + "version": "3.1.2-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 18b0d4520..fafc6bfee 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.2 @preserve +// gridstack-GridStackDD.get().ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index cd8e7d9b7..0ea6ef5da 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.2 @preserve +// gridstack-ddi.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index a8aa03bcf..55dba6230 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.2 @preserve +// gridstack-engine.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 14aeb41dc..5e5732556 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.2 extra CSS for [2-11] columns (non default) + * gridstack 3.1.2-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 0e7e166cf..5fa8a1c68 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.2 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.2-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 8bdd28d4f..676ff05b1 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.2 @preserve +// gridstack.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 02f82a1c6..f00469ef5 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.2 @preserve +// dd-base-impl.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 296f69485..0f7166f03 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.2 @preserve +// dd-draggable.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 26987c4b1..d05c1b84a 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.2 @preserve +// dd-droppable.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index b9b83a41f..c80f392e1 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.2 @preserve +// dd-elements.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 822c35abf..c7e6d1e82 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.2 @preserve +// dd-manager.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index e9d819f4d..981c78efb 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.2 @preserve +// dd-resizable-handle.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index d0728422b..d97f697d7 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.2 @preserve +// dd-resizable.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 622252c7b..8edde0891 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.2 @preserve +// dd-utils.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index bcf25af3f..423c4ad17 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.2 @preserve +// gridstack-dd-native.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index d1b9d618b..b3e16233f 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.2 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.2-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index 5e544572d..cc79fa650 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.2 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.2-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 8ec356207..64f5a9aa0 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.2 - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.2-dev - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index fffe1b30c..d35c959be 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 3.1.2 @preserve +// gridstack-dd-jqueryui.ts 3.1.2-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index 9568dd95c..8ca62a42c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.2 @preserve +// types.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index a2f0ecfa7..952336762 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.2 @preserve +// utils.ts 3.1.2-dev @preserve /** * https://gridstackjs.com/ From 85004834177cf46d9dfe2bb8642dbae321cbaf28 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 14 Dec 2020 00:18:36 -0800 Subject: [PATCH 0368/1298] call batchUpdate() on init load (#1537) * fix #1535 * make sure to call batchUpdate() on init load to preserve gs-y values --- doc/CHANGES.md | 5 ++ .../1017-items-no-x-y-for-autoPosition.html | 4 +- spec/e2e/html/1535-out-of-order.html | 89 +++++++++++++++++++ src/gridstack.ts | 4 +- 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 spec/e2e/html/1535-out-of-order.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 831d950ed..271653788 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [3.1.2-dev](#312-dev) - [3.1.2 (2020-12-7)](#312-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) @@ -43,6 +44,10 @@ Change log +## 3.1.2-dev + +- fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. + ## 3.1.2 (2020-12-7) - fix [1419](https://github.com/gridstack/gridstack.js/issues/1419) dragging into a fixed row grid works better (check if it will fit, else try to append, else won't insert) diff --git a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html index 7ce041d23..6fc86efa3 100644 --- a/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html +++ b/spec/e2e/html/1017-items-no-x-y-for-autoPosition.html @@ -1,6 +1,6 @@ @@ -35,7 +35,7 @@
    item 4
    -
    +
    item 5 first
    diff --git a/spec/e2e/html/1535-out-of-order.html b/spec/e2e/html/1535-out-of-order.html new file mode 100644 index 000000000..35f961559 --- /dev/null +++ b/spec/e2e/html/1535-out-of-order.html @@ -0,0 +1,89 @@ + + + + + + + Out of order + + + + + + +
    +

    Out of order demo

    +
    +
    +
    + This should be at position 2 +
    +
    +
    +
    + This should be at position 1 +
    +
    +
    +
    + This should be at position 0 +
    +
    +
    +
    + This should be at position 4 +
    +
    +
    +
    + This should be at position 5 +
    +
    +
    +
    + This should be at position 6 +
    +
    +
    +
    + This should be at position 7 +
    +
    +
    +
    + This should be at position 11 +
    +
    +
    +
    + This should be at position 8 +
    +
    +
    +
    + This should be at position 9 +
    +
    +
    +
    + This should be at position 12 +
    +
    +
    +
    + This should be at position 10 +
    +
    +
    +
    + This should be at position 3 +
    +
    +
    +
    + + + + diff --git a/src/gridstack.ts b/src/gridstack.ts index 676ff05b1..830b5e359 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -312,6 +312,7 @@ export class GridStack { }); if (this.opts.auto) { + this.batchUpdate(); // prevent in between re-layout #1535 TODO: this only set float=true, need to prevent collision check... let elements: {el: HTMLElement; i: number}[] = []; this.getGridItems().forEach(el => { let x = parseInt(el.getAttribute('gs-x')); @@ -322,7 +323,8 @@ export class GridStack { i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * this.opts.column }); }); - elements.sort(e => e.i).forEach(item => { this._prepareElement(item.el) }); + elements.sort(e => e.i).forEach(e => this._prepareElement(e.el)); + this.commit(); } this.engine.saveInitial(); // initial start of items From 5ba15dcb417d02ede4839edcebc95a35d8c23cd5 Mon Sep 17 00:00:00 2001 From: Carlos Herrero Date: Mon, 14 Dec 2020 11:52:24 +0100 Subject: [PATCH 0369/1298] review changes --- src/gridstack-dd.ts | 17 ++++++++++------- src/h5/dd-resizable.ts | 19 ++++++++++--------- src/utils.ts | 15 +++++++++++---- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 7432049c8..56bb8fb6e 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -353,10 +353,8 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this._gsEventHandler[event.type](event, target); } - // Saving `minRow` and adding new ones for resizing + // Saving `minRow` minRow = this.opts.minRow; - this.opts.minRow = this.getRow() + 100; - this._updateContainerHeight(); this.engine.cleanNodes(); this.engine.beginUpdate(node); @@ -428,8 +426,17 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid if (node._lastTriedX === x && node._lastTriedY === y) return; } else if (event.type === 'resize') { if (x < 0) return; + // Addin an extra row if the item it's at the bottom of the layout + if (node.y+node.h >= this.getRow()-1) { + this.opts.minRow = this.getRow() + 1; + this._updateContainerHeight(); + } + // Scrolling page if needed Utils.updateScrollResize(event as MouseEvent, el, cellHeight); + // Restore minRow + this.opts.minRow = minRow; + w = Math.round(ui.size.width / cellWidth); h = Math.round(ui.size.height / cellHeight); if (w === node.w && h === node.h) return; @@ -491,10 +498,6 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this.engine.endUpdate(); - // Removing lines rows added on `resizestart` - this.opts.minRow = minRow; - this._updateContainerHeight(); - // if we re-sized a nested grid item, let the children resize as well if (event.type === 'resizestop') { this._resizeNestedGrids(target); diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 7f274bbbc..8a817e429 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -40,6 +40,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private scrollY: number; /** @internal */ + private scrolled: number; + /** @internal */ private startEvent: MouseEvent; /** @internal value saved in the same order as _originStyleProp[] */ private elOriginStyleVal: string[]; @@ -156,7 +158,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt private _resizeStart(event: MouseEvent): DDResizable { this.originalRect = this.el.getBoundingClientRect(); const scrollEl = Utils.getScrollParent(this.el); - this.scrollY = scrollEl === null ? 0 : scrollEl.scrollTop; + this.scrollY = scrollEl ? scrollEl.scrollTop : 0; this.startEvent = event; this._setupHelper(); this._applyChange(); @@ -171,6 +173,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _resizing(event: MouseEvent, dir: string): DDResizable { + const scrollEl = Utils.getScrollParent(this.el); + this.scrolled = scrollEl ? (scrollEl.scrollTop - this.scrollY) : this.scrollY; this.temporalRect = this._getChange(event, dir); this._applyChange(); const ev = DDUtils.initEvent(event, { type: 'resize', target: this.el }); @@ -194,6 +198,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt delete this.originalRect; delete this.temporalRect; delete this.scrollY; + delete this.scrolled; return this; } @@ -222,13 +227,11 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _getChange(event: MouseEvent, dir: string): Rect { const oEvent = this.startEvent; - const scrollEl = Utils.getScrollParent(this.el); - const scrolled = scrollEl === null ? 0 : (scrollEl.scrollTop - this.scrollY); const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out. width: this.originalRect.width, - height: this.originalRect.height + scrolled, + height: this.originalRect.height + this.scrolled, left: this.originalRect.left, - top: this.originalRect.top - scrolled + top: this.originalRect.top - this.scrolled }; const offsetH = event.clientX - oEvent.clientX; @@ -300,14 +303,12 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _ui = (): DDUIData => { - const scrollEl = Utils.getScrollParent(this.el); - const scrolled = scrollEl === null ? 0 : (scrollEl.scrollTop - this.scrollY); const containmentRect = this.el.parentElement.getBoundingClientRect(); const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out. width: this.originalRect.width, - height: this.originalRect.height + scrolled, + height: this.originalRect.height + this.scrolled, left: this.originalRect.left, - top: this.originalRect.top - scrolled + top: this.originalRect.top - this.scrolled }; const rect = this.temporalRect || newRect; return { diff --git a/src/utils.ts b/src/utils.ts index 83922f44c..6d8bab0c4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -328,10 +328,18 @@ export class Utils { } } - /** @internal */ + /** + * @internal + * + * Function used to scroll the page. + * + * @param event `MouseEvent` that triggers the resize + * @param el `HTMLElement` that's being resized + * @param distance Distance to scroll + */ static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void { let scrollEl = this.getScrollParent(el); - if (scrollEl === null) return; + if (!scrollEl ) return; //const width = scrollEl.clientWidth; const height = scrollEl.clientHeight; @@ -343,9 +351,8 @@ export class Utils { // This also can be done with a timeout to keep scrolling while the mouse is // in the scrolling zone. (will have smoother behavior) scrollEl.scrollBy({ behavior: 'smooth', top: event.clientY - distance}); - } - if (bottom) { + } else if (bottom) { scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - event.clientY)}); } } From 84cec8da5fc0cc7675c96041baad8a951a21983c Mon Sep 17 00:00:00 2001 From: Carlos Herrero Date: Mon, 28 Dec 2020 18:51:19 +0100 Subject: [PATCH 0370/1298] Select scrollable parent --- src/gridstack-dd.ts | 13 ------------- src/h5/dd-resizable.ts | 12 +++++++----- src/utils.ts | 19 ++++++++----------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 56bb8fb6e..1137bab39 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -342,7 +342,6 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid // variables used/cashed between the 3 start/move/end methods, in addition to node passed above let cellWidth: number; let cellHeight: number; - let minRow: number; /** called when item starts moving/resizing */ let onStartMoving = (event: Event, ui: DDUIData): void => { @@ -353,9 +352,6 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this._gsEventHandler[event.type](event, target); } - // Saving `minRow` - minRow = this.opts.minRow; - this.engine.cleanNodes(); this.engine.beginUpdate(node); cellWidth = this.cellWidth(); @@ -426,17 +422,8 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid if (node._lastTriedX === x && node._lastTriedY === y) return; } else if (event.type === 'resize') { if (x < 0) return; - // Addin an extra row if the item it's at the bottom of the layout - if (node.y+node.h >= this.getRow()-1) { - this.opts.minRow = this.getRow() + 1; - this._updateContainerHeight(); - } - // Scrolling page if needed Utils.updateScrollResize(event as MouseEvent, el, cellHeight); - // Restore minRow - this.opts.minRow = minRow; - w = Math.round(ui.size.width / cellWidth); h = Math.round(ui.size.height / cellHeight); if (w === node.w && h === node.h) return; diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 8a817e429..d92accabb 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -42,6 +42,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private scrolled: number; /** @internal */ + private scrollEl: HTMLElement; + /** @internal */ private startEvent: MouseEvent; /** @internal value saved in the same order as _originStyleProp[] */ private elOriginStyleVal: string[]; @@ -157,8 +159,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _resizeStart(event: MouseEvent): DDResizable { this.originalRect = this.el.getBoundingClientRect(); - const scrollEl = Utils.getScrollParent(this.el); - this.scrollY = scrollEl ? scrollEl.scrollTop : 0; + this.scrollEl = Utils.getScrollParent(this.el); + this.scrollY = this.scrollEl.scrollTop; this.startEvent = event; this._setupHelper(); this._applyChange(); @@ -173,8 +175,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _resizing(event: MouseEvent, dir: string): DDResizable { - const scrollEl = Utils.getScrollParent(this.el); - this.scrolled = scrollEl ? (scrollEl.scrollTop - this.scrollY) : this.scrollY; + this.scrolled = this.scrollEl.scrollTop - this.scrollY; this.temporalRect = this._getChange(event, dir); this._applyChange(); const ev = DDUtils.initEvent(event, { type: 'resize', target: this.el }); @@ -303,7 +304,8 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _ui = (): DDUIData => { - const containmentRect = this.el.parentElement.getBoundingClientRect(); + const containmentEl = this.el.parentElement; + const containmentRect = containmentEl.getBoundingClientRect(); const newRect = { // Note: originalRect is a complex object, not a simple Rect, so copy out. width: this.originalRect.width, height: this.originalRect.height + this.scrolled, diff --git a/src/utils.ts b/src/utils.ts index 6d8bab0c4..9a5087e83 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -280,15 +280,15 @@ export class Utils { /** @internal */ static getScrollParent(el: HTMLElement): HTMLElement { - let returnEl; - if (el === null) { - returnEl = null; - } else if (el.scrollHeight > el.clientHeight) { - returnEl = el; + if (el === null) return document.documentElement; + const style = getComputedStyle(el); + const overflowRegex = /(auto|scroll)/; + + if (overflowRegex.test(style.overflow + style.overflowY)) { + return el; } else { - returnEl = this.getScrollParent(el.parentElement); + return this.getScrollParent(el.parentElement); } - return returnEl; } /** @internal */ @@ -338,10 +338,7 @@ export class Utils { * @param distance Distance to scroll */ static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void { - let scrollEl = this.getScrollParent(el); - if (!scrollEl ) return; - - //const width = scrollEl.clientWidth; + const scrollEl = this.getScrollParent(el); const height = scrollEl.clientHeight; const top = event.clientY < distance; From 07cbbd618a738ed0dc730064c6c441d1157561bf Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 29 Dec 2020 09:41:49 -0800 Subject: [PATCH 0371/1298] H5 safari drag fix * fix #1540 * DragEvent is not defined on Safari (regular MouseEvent + dataTransfer field) so fixed initEvent() to not use `instanceof DragEvent` but copy fields * according to spec (and required by Safari) the drag image has to be visible in the browser (in dom and not hidden) so make it a 1px div (this also helps chrome not showing a no-drop target cursor on Mac) * more DD code cleanup --- doc/CHANGES.md | 2 +- src/gridstack-dd.ts | 27 +++++++----------- src/gridstack.ts | 10 +++---- src/h5/dd-draggable.ts | 63 ++++++++++++++++++++++-------------------- src/h5/dd-utils.ts | 29 ++++++------------- 5 files changed, 58 insertions(+), 73 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 271653788..887129c40 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -43,10 +43,10 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) - ## 3.1.2-dev - fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. +- fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed ## 3.1.2 (2020-12-7) diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index fafc6bfee..b981574e0 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -101,7 +101,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { this.engine.beginUpdate(node); this.engine.addNode(node); - this._writeAttrs(this.placeholder, node.x, node.y, node.w, node.h); + this._writePosAttr(this.placeholder, node.x, node.y, node.w, node.h); this.el.appendChild(this.placeholder); node.el = this.placeholder; // dom we update while dragging... node._beforeDragX = node.x; @@ -354,13 +354,8 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this.engine.cleanNodes(); this.engine.beginUpdate(node); - cellWidth = this.cellWidth(); - cellHeight = this.getCellHeight(true); // force pixels for calculations - this.placeholder.setAttribute('gs-x', target.getAttribute('gs-x')); - this.placeholder.setAttribute('gs-y', target.getAttribute('gs-y')); - this.placeholder.setAttribute('gs-w', target.getAttribute('gs-w')); - this.placeholder.setAttribute('gs-h', target.getAttribute('gs-h')); + this._writePosAttr(this.placeholder, node.x, node.y, node.w, node.h) this.el.append(this.placeholder); node.el = this.placeholder; @@ -368,15 +363,13 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid node._beforeDragY = node.y; node._prevYPix = ui.position.top; + // set the min/max resize info + cellWidth = this.cellWidth(); + cellHeight = this.getCellHeight(true); // force pixels for calculations GridStackDD.get().resizable(el, 'option', 'minWidth', cellWidth * (node.minW || 1)); GridStackDD.get().resizable(el, 'option', 'minHeight', cellHeight * (node.minH || 1)); - // also set max if set #1330 - if (node.maxW) { - GridStackDD.get().resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); - } - if (node.maxH) { - GridStackDD.get().resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); - } + if (node.maxW) { GridStackDD.get().resizable(el, 'option', 'maxWidth', cellWidth * node.maxW); } + if (node.maxH) { GridStackDD.get().resizable(el, 'option', 'maxHeight', cellHeight * node.maxH); } } /** called when item is being dragged/resized */ @@ -413,7 +406,7 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid if (node._temporaryRemoved) { this.engine.addNode(node); - this._writeAttrs(this.placeholder, x, y, w, h); + this._writePosAttr(this.placeholder, x, y, w, h); this.el.appendChild(this.placeholder); node.el = this.placeholder; delete node._temporaryRemoved; @@ -464,10 +457,10 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid this._clearRemovingTimeout(el); if (!node._temporaryRemoved) { Utils.removePositioningStyles(target); - this._writeAttrs(target, node.x, node.y, node.w, node.h); + this._writePosAttr(target, node.x, node.y, node.w, node.h); } else { Utils.removePositioningStyles(target); - this._writeAttrs(target, node._beforeDragX, node._beforeDragY, node.w, node.h); + this._writePosAttr(target, node._beforeDragX, node._beforeDragY, node.w, node.h); node.x = node._beforeDragX; node.y = node._beforeDragY; delete node._temporaryRemoved; diff --git a/src/gridstack.ts b/src/gridstack.ts index 830b5e359..32abe33aa 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -304,7 +304,7 @@ export class GridStack { if (removeDOM && n._id === null) { if (el && el.parentNode) { el.parentNode.removeChild(el) } } else { - this._writeAttrs(el, n.x, n.y, n.w, n.h); + this._writePosAttr(el, n.x, n.y, n.w, n.h); } }); this._updateStyles(false, maxH); // false = don't recreate, just append if need be @@ -1283,7 +1283,7 @@ export class GridStack { } /** @internal call to write x,y,w,h attributes back to element */ - private _writeAttrs(el: HTMLElement, x?: number, y?: number, w?: number, h?: number): GridStack { + private _writePosAttr(el: HTMLElement, x?: number, y?: number, w?: number, h?: number): GridStack { if (x !== undefined && x !== null) { el.setAttribute('gs-x', String(x)); } if (y !== undefined && y !== null) { el.setAttribute('gs-y', String(y)); } if (w) { el.setAttribute('gs-w', String(w)); } @@ -1294,9 +1294,9 @@ export class GridStack { /** @internal call to write any default attributes back to element */ private _writeAttr(el: HTMLElement, node: GridStackWidget): GridStack { if (!node) return this; - this._writeAttrs(el, node.x, node.y, node.w, node.h); + this._writePosAttr(el, node.x, node.y, node.w, node.h); - let attrs /*: like GridStackWidget but strings */ = { // remaining attributes + let attrs /*: GridStackWidget but strings */ = { // remaining attributes autoPosition: 'gs-auto-position', minW: 'gs-min-w', minH: 'gs-min-h', @@ -1309,7 +1309,7 @@ export class GridStack { resizeHandles: 'gs-resize-handles' }; for (const key in attrs) { - if (node[key]) { // 0 is valid for x,y only but done above already and not in list + if (node[key]) { // 0 is valid for x,y only but done above already and not in list anyway el.setAttribute(attrs[key], String(node[key])); } else { el.removeAttribute(attrs[key]); diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 0f7166f03..2e2229379 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -45,7 +45,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private dragFollowTimer: number; /** @internal */ - private mouseDownElement: HTMLElement; + private dragEl: HTMLElement; /** @internal */ private dragging = false; /** @internal */ @@ -127,12 +127,12 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt let className = this.option.handle.substring(1); let el = event.target as HTMLElement; while (el && !el.classList.contains(className)) { el = el.parentElement; } - this.mouseDownElement = el; + this.dragEl = el; } /** @internal */ private _dragStart(event: DragEvent): void { - if (!this.mouseDownElement) { event.preventDefault(); return; } + if (!this.dragEl) { event.preventDefault(); return; } DDManager.dragElement = this; this.helper = this._createHelper(event); this._setupHelperContainmentStyle(); @@ -201,20 +201,19 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt this.triggerEvent('dragstop', ev); delete DDManager.dragElement; delete this.helper; - delete this.mouseDownElement; + delete this.dragEl; } - /** @internal */ + /** @internal create a clone copy (or user defined method) of the original drag item if set */ private _createHelper(event: DragEvent): HTMLElement { - const helperIsFunction = (typeof this.option.helper) === 'function'; - const helper = (helperIsFunction - ? (this.option.helper as ((event: Event) => HTMLElement)).apply(this.el, [event]) - : (this.option.helper === "clone" ? DDUtils.clone(this.el) : this.el) - ) as HTMLElement; + let helper = this.el; + if (typeof this.option.helper === 'function') { + helper = this.option.helper.apply(this.el, event); + } else if (this.option.helper === 'clone') { + helper = DDUtils.clone(this.el); + } if (!document.body.contains(helper)) { - DDUtils.appendTo(helper, (this.option.appendTo === "parent" - ? this.el.parentNode - : this.option.appendTo)); + DDUtils.appendTo(helper, this.option.appendTo === 'parent' ? this.el.parentNode : this.option.appendTo); } if (helper === this.el) { this.dragElementOriginStyle = DDDraggable.originStyleProp.map(prop => this.el.style[prop]); @@ -227,7 +226,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt this.helper.style.pointerEvents = 'none'; this.helper.style.width = this.dragOffset.width + 'px'; this.helper.style.height = this.dragOffset.height + 'px'; - this.helper.style['willChange'] = 'left, top'; + this.helper.style.willChange = 'left, top'; this.helper.style.transition = 'none'; // show up instantly this.helper.style.position = this.option.basePosition || DDDraggable.basePosition; this.helper.style.zIndex = '1000'; @@ -282,23 +281,27 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt return this; } - /** @internal */ + /** @internal prevent the default gost image to be created (which has wrongas we move the helper/element instead + * (legacy jquery UI code updates the top/left of the item). + * TODO: maybe use mouse event instead of HTML5 drag as we have to work around it anyway, or change code to not update + * the actual grid-item but move the gost image around (and special case jq version) ? + **/ private _cancelDragGhost(e: DragEvent): DDDraggable { - if (e.dataTransfer != null) { - e.dataTransfer.setData('text', ''); - } - e.dataTransfer.effectAllowed = 'move'; - if ('function' === typeof DataTransfer.prototype.setDragImage) { - e.dataTransfer.setDragImage(new Image(), 0, 0); - } else { - // ie - (e.target as HTMLElement).style.display = 'none'; - setTimeout(() => { - (e.target as HTMLElement).style.display = ''; - }); - e.stopPropagation(); - return; - } + /* doesn't seem to do anything... + let t = e.dataTransfer; + t.effectAllowed = 'none'; + t.dropEffect = 'none'; + t.setData('text', ''); + */ + + // NOTE: according to spec (and required by Safari see #1540) the image has to be visible in the browser (in dom and not hidden) so make it a 1px div + let img = document.createElement('div'); + img.style.width = '1px'; + img.style.height = '1px'; + document.body.appendChild(img); + e.dataTransfer.setDragImage(img, 0, 0); + setTimeout(() => document.body.removeChild(img)); // nuke once drag had a chance to grab this 'image' + e.stopPropagation(); return this; } diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 8edde0891..277132648 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -41,7 +41,7 @@ export class DDUtils { } } - public static setPositionRelative(el): void { + public static setPositionRelative(el: HTMLElement): void { if (!(/^(?:r|a|f)/).test(window.getComputedStyle(el).position)) { el.style.position = "relative"; } @@ -65,8 +65,6 @@ export class DDUtils { } public static initEvent(e: DragEvent | MouseEvent, info: { type: string; target?: EventTarget }): T { - const kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(','); - const ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(','); const evt = { type: info.type }; const obj = { button: 0, @@ -74,23 +72,14 @@ export class DDUtils { buttons: 1, bubbles: true, cancelable: true, - originEvent: e, target: info.target ? info.target : e.target + }; + // don't check for `instanceof DragEvent` as Safari use MouseEvent #1540 + if ((e as DragEvent).dataTransfer) { + evt['dataTransfer'] = (e as DragEvent).dataTransfer; // workaround 'readonly' field. } - if (e instanceof DragEvent) { - Object.assign(obj, { dataTransfer: e.dataTransfer }); - } - DDUtils._copyProps(evt, e, kbdProps); - DDUtils._copyProps(evt, e, ptProps); - DDUtils._copyProps(evt, obj, Object.keys(obj)); - return evt as unknown as T; - } - - /** @internal */ - private static _copyProps(dst: unknown, src: unknown, props: string[]): void { - for (let i = 0; i < props.length; i++) { - const p = props[i]; - dst[p] = src[p]; - } + ['altKey','ctrlKey','metaKey','shiftKey'].forEach(p => evt[p] = e[p]); // keys + ['pageX','pageY','clientX','clientY','screenX','screenY'].forEach(p => evt[p] = e[p]); // point info + return {...evt, ...obj} as unknown as T; } -} +} \ No newline at end of file From d53af5c27c905baf8227ae8aceefbff3ef2c3304 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 14:45:57 -0800 Subject: [PATCH 0372/1298] fix to disableMove() * fix #1545 * make sure to remove event handlers when disabling move * constructor now calls enable(), and destroy calls disable() to centralize call --- doc/CHANGES.md | 1 + spec/e2e/html/1545_disable_move_after.html | 57 ++++++++++++++++++++++ src/gridstack-ddi.ts | 6 +-- src/h5/dd-draggable.ts | 23 +++++---- src/h5/dd-resizable.ts | 19 +++----- 5 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 spec/e2e/html/1545_disable_move_after.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 887129c40..c3b3cc75d 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -47,6 +47,7 @@ Change log - fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed +- fix [1545](https://github.com/gridstack/gridstack.js/issues/1545) `disableMove()` correctly prevents drag later (remove events and draggable attribute) ## 3.1.2 (2020-12-7) diff --git a/spec/e2e/html/1545_disable_move_after.html b/spec/e2e/html/1545_disable_move_after.html new file mode 100644 index 000000000..ce8719ecb --- /dev/null +++ b/spec/e2e/html/1545_disable_move_after.html @@ -0,0 +1,57 @@ + + + + + + + disable move after + + + + + + +
    +

    disable move/resize after #1545

    + +

    +
    +
    + + + + diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 0ea6ef5da..6e0dad86a 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -17,14 +17,14 @@ export class GridStackDDI { protected static ddi: GridStackDDI; /** call this method to register your plugin instead of the default no-op one */ - static registerPlugin(pluginClass: typeof GridStackDDI): void { + static registerPlugin(pluginClass: typeof GridStackDDI): GridStackDDI { GridStackDDI.ddi = new pluginClass(); + return GridStackDDI.ddi; } /** get the current registered plugin to use */ static get(): GridStackDDI { - if (!GridStackDDI.ddi) { GridStackDDI.registerPlugin(GridStackDDI); } - return GridStackDDI.ddi; + return GridStackDDI.ddi || GridStackDDI.registerPlugin(GridStackDDI); } /** removes any drag&drop present (called during destroy) */ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 2e2229379..c3f9717d4 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -72,11 +72,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt this._drag = this._drag.bind(this); this._dragEnd = this._dragEnd.bind(this); this._dragFollow = this._dragFollow.bind(this); - - this.el.draggable = true; - this.el.classList.add('ui-draggable'); - this.el.addEventListener('mousedown', this._mouseDown); - this.el.addEventListener('dragstart', this._dragStart); + this.enable(); } public on(event: 'drag' | 'dragstart' | 'dragstop', callback: (event: DragEvent) => void): void { @@ -91,12 +87,18 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt super.enable(); this.el.draggable = true; this.el.classList.remove('ui-draggable-disabled'); + this.el.classList.add('ui-draggable'); + this.el.addEventListener('mousedown', this._mouseDown); + this.el.addEventListener('dragstart', this._dragStart); } - public disable(): void { + public disable(forDestroy = false): void { super.disable(); - this.el.draggable = false; - this.el.classList.add('ui-draggable-disabled'); + this.el.removeAttribute('draggable'); + this.el.classList.remove('ui-draggable'); + if (!forDestroy) this.el.classList.add('ui-draggable-disabled'); + this.el.removeEventListener('mousedown', this._mouseDown); + this.el.removeEventListener('dragstart', this._dragStart); } public destroy(): void { @@ -106,10 +108,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt // destroyed. this._dragEnd({} as DragEvent); } - this.el.draggable = false; - this.el.classList.remove('ui-draggable'); - this.el.removeEventListener('mousedown', this._mouseDown); - this.el.removeEventListener('dragstart', this._dragStart); + this.disable(true); delete this.el; delete this.helper; delete this.option; diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index d97f697d7..54d04b050 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -49,8 +49,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt super(); this.el = el; this.option = opts; - - this.el.classList.add('ui-resizable'); + this.enable(); this._setupAutoHide(); this._setupHandlers(); } @@ -64,17 +63,15 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt } public enable(): void { - if (this.disabled) { - super.enable(); - this.el.classList.remove('ui-resizable-disabled'); - } + super.enable(); + this.el.classList.add('ui-resizable'); + this.el.classList.remove('ui-resizable-disabled'); } public disable(): void { - if (!this.disabled) { - super.disable(); - this.el.classList.add('ui-resizable-disabled'); - } + super.disable(); + this.el.classList.add('ui-resizable-disabled'); + this.el.classList.remove('ui-resizable'); } public destroy(): void { @@ -106,7 +103,7 @@ export class DDResizable extends DDBaseImplement implements HTMLElementExtendOpt private _setupAutoHide(): DDResizable { if (this.option.autoHide) { this.el.classList.add('ui-resizable-autohide'); - // use mouseover/mouseout instead of mouseenter mouseleave to get better performance; + // use mouseover/mouseout instead of mouseenter/mouseleave to get better performance; this.el.addEventListener('mouseover', this._showHandlers); this.el.addEventListener('mouseout', this._hideHandlers); } else { From 2d4771014ada9734471c8a57d865face5ff78d44 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 16:43:11 -0800 Subject: [PATCH 0373/1298] fix resize delay causing potential error msg * fix #1546 * re-wrote rhlin resize code to no longer do a delay in adding move and up events. not sure why he had 100ms + 300ms delays causing race conditions... * also fixed so we clean up correctly * also resize won't happen unless you move 3 pix now (was 1) --- doc/CHANGES.md | 1 + src/h5/dd-resizable-handle.ts | 76 +++++++++++++---------------------- 2 files changed, 29 insertions(+), 48 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index c3b3cc75d..b4d4783e5 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -48,6 +48,7 @@ Change log - fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed - fix [1545](https://github.com/gridstack/gridstack.js/issues/1545) `disableMove()` correctly prevents drag later (remove events and draggable attribute) +- fix [1546](https://github.com/gridstack/gridstack.js/issues/1546) resize no longer delayed, which caused race conditions errors ## 3.1.2 (2020-12-7) diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 981c78efb..7d65055b2 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -20,10 +20,8 @@ export class DDResizableHandle { private option: DDResizableHandleOpt; /** @internal */ private dir: string; - /** @internal */ - private mouseMoving = false; - /** @internal */ - private started = false; + /** @internal true after we've moved enough pixels to start a resize */ + private moving = false; /** @internal */ private mouseDownEvent: MouseEvent; /** @internal */ @@ -38,10 +36,11 @@ export class DDResizableHandle { this._mouseMove = this._mouseMove.bind(this); this._mouseUp = this._mouseUp.bind(this); - this.init(); + this._init(); } - public init(): DDResizableHandle { + /** @internal */ + private _init(): DDResizableHandle { const el = document.createElement('div'); el.classList.add('ui-resizable-handle'); el.classList.add(`${DDResizableHandle.prefix}${this.dir}`); @@ -53,68 +52,49 @@ export class DDResizableHandle { return this; } + /** call this when resize handle needs to be removed and cleaned up */ public destroy(): DDResizableHandle { + if (this.moving) this._mouseUp(this.mouseDownEvent); + this.el.removeEventListener('mousedown', this._mouseDown); this.host.removeChild(this.el); + delete this.el; + delete this.host; return this; } - /** @internal */ - private _mouseDown(event: MouseEvent): void { - this.mouseDownEvent = event; - setTimeout(() => { - document.addEventListener('mousemove', this._mouseMove, true); - document.addEventListener('mouseup', this._mouseUp); - setTimeout(() => { - if (!this.mouseMoving) { - document.removeEventListener('mousemove', this._mouseMove, true); - document.removeEventListener('mouseup', this._mouseUp); - delete this.mouseDownEvent; - } - }, 300); - }, 100); + /** @internal called on mouse down on us: capture move on the entire document (mouse might not stay on us) until we release the mouse */ + private _mouseDown(e: MouseEvent): void { + this.mouseDownEvent = e; + document.addEventListener('mousemove', this._mouseMove, true); // capture, not bubble + document.addEventListener('mouseup', this._mouseUp); } /** @internal */ - private _mouseMove(event: MouseEvent): void { - if (!this.started && !this.mouseMoving) { - if (this._hasMoved(event, this.mouseDownEvent)) { - this.mouseMoving = true; - this._triggerEvent('start', this.mouseDownEvent); - this.started = true; - } - } - if (this.started) { - this._triggerEvent('move', event); + private _mouseMove(e: MouseEvent): void { + let s = this.mouseDownEvent; + // don't start unless we've moved at least 3 pixels + if (!this.moving && Math.abs(e.x - s.x) + Math.abs(e.y - s.y) > 2) { + this.moving = true; + this._triggerEvent('start', this.mouseDownEvent); + } else if (this.moving) { + this._triggerEvent('move', e); } } /** @internal */ - private _mouseUp(event: MouseEvent): void { - if (this.mouseMoving) { - this._triggerEvent('stop', event); + private _mouseUp(e: MouseEvent): void { + if (this.moving) { + this._triggerEvent('stop', e); } document.removeEventListener('mousemove', this._mouseMove, true); document.removeEventListener('mouseup', this._mouseUp); - this.mouseMoving = false; - this.started = false; + delete this.moving; delete this.mouseDownEvent; } - /** @internal */ - private _hasMoved(event: MouseEvent, oEvent: MouseEvent): boolean { - const { clientX, clientY } = event; - const { clientX: oClientX, clientY: oClientY } = oEvent; - return ( - Math.abs(clientX - oClientX) > 1 - || Math.abs(clientY - oClientY) > 1 - ); - } - /** @internal */ private _triggerEvent(name: string, event: MouseEvent): DDResizableHandle { - if (this.option[name]) { - this.option[name](event); - } + if (this.option[name]) this.option[name](event); return this; } } From d72ecdec4aa23f094abe81099b26adac743b4645 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 18:41:58 -0800 Subject: [PATCH 0374/1298] auto-scroll doc fix --- doc/CHANGES.md | 1 + src/utils.ts | 11 ++++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index b4d4783e5..6f81f7af0 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -49,6 +49,7 @@ Change log - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed - fix [1545](https://github.com/gridstack/gridstack.js/issues/1545) `disableMove()` correctly prevents drag later (remove events and draggable attribute) - fix [1546](https://github.com/gridstack/gridstack.js/issues/1546) resize no longer delayed, which caused race conditions errors +- fix [1001](https://github.com/gridstack/gridstack.js/issues/1001) resizing near bottom/top needs to auto-scroll/. thanks [@hbcarlos](https://github.com/hbcarlos)! ## 3.1.2 (2020-12-7) diff --git a/src/utils.ts b/src/utils.ts index 21a488c33..8588513e2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -328,14 +328,12 @@ export class Utils { } } - /** - * @internal - * - * Function used to scroll the page. - * + /** + * @internal Function used to scroll the page. + * * @param event `MouseEvent` that triggers the resize * @param el `HTMLElement` that's being resized - * @param distance Distance to scroll + * @param distance Distance from the V edges to start scrolling */ static updateScrollResize(event: MouseEvent, el: HTMLElement, distance: number): void { const scrollEl = this.getScrollParent(el); @@ -348,7 +346,6 @@ export class Utils { // This also can be done with a timeout to keep scrolling while the mouse is // in the scrolling zone. (will have smoother behavior) scrollEl.scrollBy({ behavior: 'smooth', top: event.clientY - distance}); - } else if (bottom) { scrollEl.scrollBy({ behavior: 'smooth', top: distance - (height - event.clientY)}); } From 1b55b81b4a439edf00c7075eaf673dc67097c5a4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 18:44:44 -0800 Subject: [PATCH 0375/1298] rev 3.1.3 --- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 6f81f7af0..5b6308699 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.2-dev](#312-dev) +- [3.1.3](#313) - [3.1.2 (2020-12-7)](#312-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) @@ -43,7 +43,7 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) -## 3.1.2-dev +## 3.1.3 - fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed diff --git a/package.json b/package.json index d5481d72b..2258af1bd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.2-dev", + "version": "3.1.3", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 77c0f1999..d568593b3 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.2-dev @preserve +// gridstack-GridStackDD.get().ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 6e0dad86a..967de479e 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.2-dev @preserve +// gridstack-ddi.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 55dba6230..e0676e720 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.2-dev @preserve +// gridstack-engine.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 5e5732556..8a4703317 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.2-dev extra CSS for [2-11] columns (non default) + * gridstack 3.1.3 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 5fa8a1c68..a0cf0d486 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.2-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.3 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 32abe33aa..848fc32ee 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.2-dev @preserve +// gridstack.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index f00469ef5..4e313fb82 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.2-dev @preserve +// dd-base-impl.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index c3f9717d4..a9610b6db 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.2-dev @preserve +// dd-draggable.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index d05c1b84a..d0748178d 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.2-dev @preserve +// dd-droppable.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index c80f392e1..59a70802d 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.2-dev @preserve +// dd-elements.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index c7e6d1e82..9f41fb6a5 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.2-dev @preserve +// dd-manager.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 7d65055b2..547cdc5ad 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.2-dev @preserve +// dd-resizable-handle.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index e835b58ab..da1e4bd2f 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.2-dev @preserve +// dd-resizable.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 277132648..2dfc9ae49 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.2-dev @preserve +// dd-utils.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 423c4ad17..ea15609a9 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.2-dev @preserve +// gridstack-dd-native.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index b3e16233f..974eeae35 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.2-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.3 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index cc79fa650..80ee5ef29 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.2-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.3 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 64f5a9aa0..dbe231c96 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.2-dev - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.3 - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index d35c959be..37b082879 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 3.1.2-dev @preserve +// gridstack-dd-jqueryui.ts 3.1.3 @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index 8ca62a42c..bea413566 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.2-dev @preserve +// types.ts 3.1.3 @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index 8588513e2..edc630926 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.2-dev @preserve +// utils.ts 3.1.3 @preserve /** * https://gridstackjs.com/ From aa41fc26ecac84cf50e4c99db2146f7ca212551c Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 18:51:36 -0800 Subject: [PATCH 0376/1298] test fix for #1001 making sure yarn test still works (now returns main doc if no explicit scrolling parent) --- spec/utils-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/utils-spec.ts b/spec/utils-spec.ts index 40b00c5e3..7826ca17e 100644 --- a/spec/utils-spec.ts +++ b/spec/utils-spec.ts @@ -123,7 +123,7 @@ describe('gridstack utils', function() { expect(el.style.position).toEqual(''); // bogus test - expect(Utils.getScrollParent(el)).toEqual(null); + expect(Utils.getScrollParent(el)).not.toBe(null); // bogus test Utils.updateScrollPosition(el, {top: 20}, 10); }); From 7ac5968b86b751809e5eddfff848c1cb47c78813 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 2 Jan 2021 19:26:20 -0800 Subject: [PATCH 0377/1298] next rev --- doc/CHANGES.md | 9 +++++++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/jq/gridstack-dd-jqueryui.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 23 files changed, 29 insertions(+), 24 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 5b6308699..a3fa1a7a4 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.3](#313) +- [3.1.3-dev](#313-dev) +- [3.1.3 (2021-1-2)](#313-2021-1-2) - [3.1.2 (2020-12-7)](#312-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) - [3.0.0 (2020-11-29)](#300-2020-11-29) @@ -43,7 +44,11 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) -## 3.1.3 +## 3.1.3-dev + +- TBD + +## 3.1.3 (2021-1-2) - fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed diff --git a/package.json b/package.json index 2258af1bd..9a1ed3ffb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.3", + "version": "3.1.3-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index d568593b3..6a5576093 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.3 @preserve +// gridstack-GridStackDD.get().ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 967de479e..21d08606b 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.3 @preserve +// gridstack-ddi.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index e0676e720..9523c2766 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.3 @preserve +// gridstack-engine.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 8a4703317..522e54f19 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.3 extra CSS for [2-11] columns (non default) + * gridstack 3.1.3-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index a0cf0d486..26ab4c788 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.3 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.3-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 848fc32ee..cf94b32a3 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.3 @preserve +// gridstack.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 4e313fb82..55d2f943a 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.3 @preserve +// dd-base-impl.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index a9610b6db..bb762cb18 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.3 @preserve +// dd-draggable.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index d0748178d..6579bbfe0 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.3 @preserve +// dd-droppable.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index 59a70802d..97773ecf8 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.3 @preserve +// dd-elements.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 9f41fb6a5..92e4b2786 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.3 @preserve +// dd-manager.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 547cdc5ad..a35cff33f 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.3 @preserve +// dd-resizable-handle.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index da1e4bd2f..f72ce77b7 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.3 @preserve +// dd-resizable.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 2dfc9ae49..a0c3cedaa 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.3 @preserve +// dd-utils.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index ea15609a9..75f407ab6 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.3 @preserve +// gridstack-dd-native.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index 974eeae35..371eab275 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.3 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.3-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index 80ee5ef29..ae85e705b 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.3 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.3-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index dbe231c96..89de3cc27 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.3 - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.3-dev - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/jq/gridstack-dd-jqueryui.ts b/src/jq/gridstack-dd-jqueryui.ts index 37b082879..37061f165 100644 --- a/src/jq/gridstack-dd-jqueryui.ts +++ b/src/jq/gridstack-dd-jqueryui.ts @@ -1,4 +1,4 @@ -// gridstack-dd-jqueryui.ts 3.1.3 @preserve +// gridstack-dd-jqueryui.ts 3.1.3-dev @preserve /** JQuery UI Drag&Drop plugin * https://gridstackjs.com/ diff --git a/src/types.ts b/src/types.ts index bea413566..66b9be0da 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.3 @preserve +// types.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index edc630926..74a7ad198 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.3 @preserve +// utils.ts 3.1.3-dev @preserve /** * https://gridstackjs.com/ From aaa167c26cf3a82ca24560c9a1736b1f5599793b Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 3 Jan 2021 08:49:52 -0800 Subject: [PATCH 0378/1298] fixed no-drop cursor on windows * when dragging within a default grid (no external drag in) --- doc/CHANGES.md | 4 ++-- src/gridstack-dd.ts | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index a3fa1a7a4..0eec1086a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -46,12 +46,12 @@ Change log ## 3.1.3-dev -- TBD +- fix [1557](https://github.com/gridstack/gridstack.js/pull/1557) fixed no-drop cursor on windows when dragging within a default grid (no external drag in) ## 3.1.3 (2021-1-2) -- fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1540](https://github.com/gridstack/gridstack.js/issues/1540) Safari H5 drag&drop fixed +- fix [1535](https://github.com/gridstack/gridstack.js/issues/1535) use batchUpdate() around grid init to make sure gs-y attributes are respected. - fix [1545](https://github.com/gridstack/gridstack.js/issues/1545) `disableMove()` correctly prevents drag later (remove events and draggable attribute) - fix [1546](https://github.com/gridstack/gridstack.js/issues/1546) resize no longer delayed, which caused race conditions errors - fix [1001](https://github.com/gridstack/gridstack.js/issues/1001) resizing near bottom/top needs to auto-scroll/. thanks [@hbcarlos](https://github.com/hbcarlos)! diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 6a5576093..058ce0be6 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -77,7 +77,16 @@ export abstract class GridStackDD extends GridStackDDI { /** @internal called to add drag over support to support widgets */ GridStack.prototype._setupAcceptWidget = function(): GridStack { - if (this.opts.staticGrid || !this.opts.acceptWidgets) return this; + if (this.opts.staticGrid) return this; + + // if we don't accept external widgets (default) we still need to accept dragging within our + // list of items (else we get a no-drop icon on windows) + if (!this.opts.acceptWidgets) { + GridStackDD.get().droppable(this.el, { + accept: (el: GridItemHTMLElement) => el.gridstackNode && el.gridstackNode.grid === this + }) + return this; + } let onDrag = (event, el: GridItemHTMLElement) => { let node = el.gridstackNode; From f32a73f267446ddea20bf7dbac5160c2f2ce7c3d Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 9 Jan 2021 09:59:17 -0800 Subject: [PATCH 0379/1298] H5 Safari fix delay when dropping fix for #1541 * on Safari we had a delay due to a 300ms+ animating back to old location on drop. 'dragend' wasn't called (what we use) until that animation was done. to fix that had to call `preventDefault()` during drag https://stackoverflow.com/questions/61760755/how-to-fire-dragend-event-immediately * for that to work I ALSO had to remove `{passive: true}` when adding the drag event, so passing just 'true' for grabing event NOTE: I noticed Safari doesn't auto-scroll the grid (didn't before), but chrome Mac does. html5 drag event is painfully incompatible between browsers... --- doc/CHANGES.md | 3 ++- src/h5/dd-draggable.ts | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 0eec1086a..4a5da77eb 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -46,7 +46,8 @@ Change log ## 3.1.3-dev -- fix [1557](https://github.com/gridstack/gridstack.js/pull/1557) fixed no-drop cursor on windows when dragging within a default grid (no external drag in) +- fix [1557](https://github.com/gridstack/gridstack.js/pull/1557) fix no-drop cursor on windows when dragging within a default grid (no external drag in) +- fix [1541](https://github.com/gridstack/gridstack.js/pull/1541) fix Safari H5 elay when dropping items ## 3.1.3 (2021-1-2) diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index bb762cb18..e43acb9d3 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -56,8 +56,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt private helperContainment: HTMLElement; /** @internal */ private static basePosition: 'fixed' | 'absolute' = 'absolute'; - /** @internal */ - private static dragEventListenerOption = DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; + /** @internal #1541 can't have {passive: true} on Safari as otherwise it reverts animate back to old location on drop */ + private static dragEventListenerOption = true; // DDUtils.isEventSupportPassiveOption ? { capture: true, passive: true } : true; /** @internal */ private static originStyleProp = ['transition', 'pointerEvents', 'position', 'left', 'top', 'opacity', 'zIndex', 'width', 'height', 'willChange']; @@ -164,6 +164,9 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal */ private _drag(event: DragEvent): void { + // Safari: prevent default to allow drop to happen instead of reverting back (with animation) and delaying dragend #1541 + // https://stackoverflow.com/questions/61760755/how-to-fire-dragend-event-immediately + event.preventDefault(); this._dragFollow(event); const ev = DDUtils.initEvent(event, { target: this.el, type: 'drag' }); if (this.option.drag) { From 3910543b689bc3ba6a867c02bf0148de6ce4f496 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 9 Jan 2021 18:03:39 -0800 Subject: [PATCH 0380/1298] tweak to saving nested grids with content --- src/gridstack.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gridstack.ts b/src/gridstack.ts index cf94b32a3..5c713f71c 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -427,7 +427,7 @@ export class GridStack { // check for HTML content as well if (saveContent) { list.forEach(n => { - if (n.el) { + if (n.el && !n.subGrid) { // sub-grid are saved differently, not plain content let sub = n.el.querySelector('.grid-stack-item-content'); n.content = sub ? sub.innerHTML : undefined; if (!n.content) delete n.content; @@ -442,7 +442,7 @@ export class GridStack { // check for nested grid list.forEach(n => { if (n.subGrid) { - n.subGrid = (n.subGrid as GridStack).save(saveContent, true) as GridStackOptions; + n.subGrid = (n.subGrid as GridStack).save(saveContent, saveGridOpt) as GridStackOptions; } }) From cb93d8239c3a4ee6dfdd4bccefea7fa76c4d1da3 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 11 Jan 2021 18:22:23 -0800 Subject: [PATCH 0381/1298] rev 3.1.4 --- doc/CHANGES.md | 10 +++++++--- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 22 files changed, 28 insertions(+), 24 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 4a5da77eb..2a39b677a 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,8 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.3-dev](#313-dev) +- [3.1.4-dev](#314-dev) +- [3.1.4 (2021-1-11)](#314-2021-1-11) - [3.1.3 (2021-1-2)](#313-2021-1-2) - [3.1.2 (2020-12-7)](#312-2020-12-7) - [3.1.0 (2020-12-4)](#310-2020-12-4) @@ -44,10 +45,13 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) -## 3.1.3-dev +## 3.1.4-dev + +- TBD +## 3.1.4 (2021-1-11) - fix [1557](https://github.com/gridstack/gridstack.js/pull/1557) fix no-drop cursor on windows when dragging within a default grid (no external drag in) -- fix [1541](https://github.com/gridstack/gridstack.js/pull/1541) fix Safari H5 elay when dropping items +- fix [1541](https://github.com/gridstack/gridstack.js/pull/1541) fix Safari H5 delay when dropping items ## 3.1.3 (2021-1-2) diff --git a/package.json b/package.json index 9a1ed3ffb..fe1855431 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.3-dev", + "version": "3.1.4", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 058ce0be6..1d089809a 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.3-dev @preserve +// gridstack-GridStackDD.get().ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 21d08606b..6c9ccc8e1 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.3-dev @preserve +// gridstack-ddi.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 9523c2766..7395e366a 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.3-dev @preserve +// gridstack-engine.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 522e54f19..cf4cf3b80 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.3-dev extra CSS for [2-11] columns (non default) + * gridstack 3.1.4 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 26ab4c788..18e241a68 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.3-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.4 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 5c713f71c..532d46bae 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.3-dev @preserve +// gridstack.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 55d2f943a..f3c319f10 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.3-dev @preserve +// dd-base-impl.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index e43acb9d3..6f1479551 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.3-dev @preserve +// dd-draggable.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 6579bbfe0..54543dacf 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.3-dev @preserve +// dd-droppable.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index 97773ecf8..ddb171cf8 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.3-dev @preserve +// dd-elements.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 92e4b2786..589e19b2f 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.3-dev @preserve +// dd-manager.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index a35cff33f..93ed2ad91 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.3-dev @preserve +// dd-resizable-handle.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index f72ce77b7..8cbcff0cc 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.3-dev @preserve +// dd-resizable.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index a0c3cedaa..6a80e47f0 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.3-dev @preserve +// dd-utils.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 75f407ab6..054384e3e 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.3-dev @preserve +// gridstack-dd-native.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index 371eab275..d97fb67dd 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.3-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.4 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index ae85e705b..2e472e3a5 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.3-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.4 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 89de3cc27..73e7ab8e2 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.3-dev - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.4 - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/types.ts b/src/types.ts index 66b9be0da..4f68f79c2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.3-dev @preserve +// types.ts 3.1.4 @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index 74a7ad198..b30fd7528 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.3-dev @preserve +// utils.ts 3.1.4 @preserve /** * https://gridstackjs.com/ From 21411131138aabbe7d21cb9304ccdca2c71a7cd4 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Mon, 11 Jan 2021 18:39:16 -0800 Subject: [PATCH 0382/1298] next rev --- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index fe1855431..35a955e42 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.4", + "version": "3.1.4-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 1d089809a..f48326cd2 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.4 @preserve +// gridstack-GridStackDD.get().ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 6c9ccc8e1..e5b55fd1d 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.4 @preserve +// gridstack-ddi.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 7395e366a..cdf25ca7e 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.4 @preserve +// gridstack-engine.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index cf4cf3b80..a785a4518 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.4 extra CSS for [2-11] columns (non default) + * gridstack 3.1.4-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 18e241a68..9ab01d067 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.4 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.4-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 532d46bae..1dd55a2e3 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.4 @preserve +// gridstack.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index f3c319f10..43e46059c 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.4 @preserve +// dd-base-impl.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 6f1479551..c873f9c8d 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.4 @preserve +// dd-draggable.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 54543dacf..bd5479a1b 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.4 @preserve +// dd-droppable.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index ddb171cf8..8ff879b7a 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.4 @preserve +// dd-elements.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 589e19b2f..dae1374b9 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.4 @preserve +// dd-manager.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index 93ed2ad91..bf07ceb8e 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.4 @preserve +// dd-resizable-handle.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 8cbcff0cc..d5a5c5d7f 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.4 @preserve +// dd-resizable.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 6a80e47f0..12c82d5a5 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.4 @preserve +// dd-utils.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 054384e3e..615305d47 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.4 @preserve +// gridstack-dd-native.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index d97fb67dd..61de53b89 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.4 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.4-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index 2e472e3a5..ba300c483 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.4 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.4-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 73e7ab8e2..74ba63ca0 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.4 - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.4-dev - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/types.ts b/src/types.ts index 4f68f79c2..5eea5a492 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.4 @preserve +// types.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index b30fd7528..81da00fc6 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.4 @preserve +// utils.ts 3.1.4-dev @preserve /** * https://gridstackjs.com/ From 5d36e26f37e167e5124735d14a8efc6fe6542f41 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 12 Jan 2021 19:20:01 -0800 Subject: [PATCH 0383/1298] return code cleanup --- spec/gridstack-engine-spec.ts | 2 +- src/gridstack-dd.ts | 14 +++++----- src/gridstack-engine.ts | 20 +++++++------- src/gridstack.ts | 50 +++++++++++++++++------------------ src/h5/dd-base-impl.ts | 2 +- src/h5/dd-droppable.ts | 8 +++--- src/h5/gridstack-dd-native.ts | 2 +- src/utils.ts | 12 ++++----- 8 files changed, 55 insertions(+), 55 deletions(-) diff --git a/spec/gridstack-engine-spec.ts b/spec/gridstack-engine-spec.ts index 8628f6d09..b5284c623 100644 --- a/spec/gridstack-engine-spec.ts +++ b/spec/gridstack-engine-spec.ts @@ -9,7 +9,7 @@ describe('gridstack engine', function() { let w: any = window; let findNode = function(engine, id) { - return engine.nodes.find(function(i) { return i.id === id; }); + return engine.nodes.find((i) => i.id === id); }; it('should exist setup function.', function() { diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index f48326cd2..efb1afc90 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -170,7 +170,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { }) .on(this.el, 'dropout', (event, el: GridItemHTMLElement) => { let node = el.gridstackNode; - if (!node) { return; } + if (!node) return; // clear any added flag now that we are leaving #1484 delete node._added; @@ -195,7 +195,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { let node = el.gridstackNode; let wasAdded = !!this.placeholder.parentElement; // skip items not actually added to us because of constrains, but do cleanup #1419 // ignore drop on ourself from ourself - dragend will handle the simple move instead - if (node && node.grid === this) { return false; } + if (node && node.grid === this) return false; this.placeholder.remove(); @@ -210,7 +210,7 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { oGrid._triggerRemoveEvent(); } - if (!node) { return false; } + if (!node) return false; // use existing placeholder node as it's already in our list with drop location if (wasAdded) { @@ -522,10 +522,10 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid * @param val if true widget will be draggable. */ GridStack.prototype.movable = function(els: GridStackElement, val: boolean): GridStack { - if (this.opts.staticGrid) { return this; } // can't move a static grid! + if (this.opts.staticGrid) return this; // can't move a static grid! GridStack.getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node || node.locked) { return } + if (!node || node.locked) return; node.noMove = !(val || false); if (node.noMove) { GridStackDD.get().draggable(el, 'disable'); @@ -545,10 +545,10 @@ GridStack.prototype.movable = function(els: GridStackElement, val: boolean): Gri * @param val if true widget will be resizable. */ GridStack.prototype.resizable = function(els: GridStackElement, val: boolean): GridStack { - if (this.opts.staticGrid) { return this; } // can't resize a static grid! + if (this.opts.staticGrid) return this; // can't resize a static grid! GridStack.getElements(els).forEach(el => { let node = el.gridstackNode; - if (!node || node.locked) { return; } + if (!node || node.locked) return; node.noResize = !(val || false); if (node.noResize) { GridStackDD.get().resizable(el, 'disable'); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index cdf25ca7e..765c98863 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -82,7 +82,7 @@ export class GridStackEngine { } while (true) { let collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn}); - if (!collisionNode) { return this } + if (!collisionNode) return this; let moved; if (collisionNode.locked) { // if colliding with a locked item, move ourself instead @@ -92,7 +92,7 @@ export class GridStackEngine { moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.h, collisionNode.w, collisionNode.h, true); } - if (!moved) { return this } // break inf loop if we couldn't move after all (ex: maxRow, fixed) + if (!moved) return this; // break inf loop if we couldn't move after all (ex: maxRow, fixed) } } @@ -106,7 +106,7 @@ export class GridStackEngine { /** re-layout grid items to reclaim any empty space */ public compact(): GridStackEngine { - if (this.nodes.length === 0) { return this } + if (this.nodes.length === 0) return this; this.batchUpdate(); this._sortNodes(); let copyNodes = this.nodes; @@ -124,7 +124,7 @@ export class GridStackEngine { /** enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html) */ public set float(val: boolean) { - if (this._float === val) { return; } + if (this._float === val) return; this._float = val || false; if (!val) { this._packNodes(); @@ -165,7 +165,7 @@ export class GridStackEngine { }); } else { this.nodes.forEach((n, i) => { - if (n.locked) { return this } + if (n.locked) return this; while (n.y > 0) { let newY = n.y - 1; let canBeMoved = i === 0; @@ -284,7 +284,7 @@ export class GridStackEngine { /** @internal */ private _notify(nodes?: GridStackNode | GridStackNode[], removeDOM = true): GridStackEngine { - if (this.batchMode) { return this } + if (this.batchMode) return this; nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) ); let dirtyNodes = nodes.concat(this.getDirtyNodes()); if (this.onChange) { @@ -294,7 +294,7 @@ export class GridStackEngine { } public cleanNodes(): GridStackEngine { - if (this.batchMode) { return this } + if (this.batchMode) return this; this.nodes.forEach(n => { delete n._dirty; }); return this; } @@ -348,7 +348,7 @@ export class GridStackEngine { public removeAll(removeDOM = true): GridStackEngine { delete this._layouts; - if (this.nodes.length === 0) { return this } + if (this.nodes.length === 0) return this; if (removeDOM) { this.nodes.forEach(n => { n._id = null; }); // hint that node is being removed } @@ -427,7 +427,7 @@ export class GridStackEngine { } public moveNode(node: GridStackNode, x: number, y: number, w?: number, h?: number, noPack?: boolean): GridStackNode { - if (node.locked) { return null; } + if (node.locked) return null; if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } if (typeof w !== 'number') { w = node.w; } @@ -544,7 +544,7 @@ export class GridStackEngine { * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column */ public updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[], layout: ColumnOptions = 'moveScale'): GridStackEngine { - if (!this.nodes.length || oldColumn === column) { return this } + if (!this.nodes.length || oldColumn === column) return this; // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data this.cacheLayout(this.nodes, oldColumn); diff --git a/src/gridstack.ts b/src/gridstack.ts index 1dd55a2e3..202ed1ba2 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -163,7 +163,7 @@ export class GridStack { * @param opt grids options used to initialize the grid, and list of children */ public static addGrid(parent: HTMLElement, opt: GridStackOptions = {}): GridStack { - if (!parent) { return null; } + if (!parent) return null; // create the grid element let doc = document.implementation.createHTMLDocument(); @@ -621,7 +621,7 @@ export class GridStack { * Note: items will never be outside of the current column boundaries. default (moveScale). Ignored for 1 column */ public column(column: number, layout: ColumnOptions = 'moveScale'): GridStack { - if (this.opts.column === column) { return this; } + if (this.opts.column === column) return this; let oldColumn = this.opts.column; // if we go into 1 column mode (which happens if we're sized less than minW unless disableOneColumnMode is on) @@ -673,7 +673,7 @@ export class GridStack { * @param removeDOM if `false` grid and items HTML elements will not be removed from the DOM (Optional. Default `true`). */ public destroy(removeDOM = true): GridStack { - if (!this.el) { return; } // prevent multiple calls + if (!this.el) return; // prevent multiple calls this._updateWindowResizeEvent(true); this.setStatic(true); // permanently removes DD if (!removeDOM) { @@ -702,7 +702,7 @@ export class GridStack { * grid.enableResize(false); */ public disable(): GridStack { - if (this.opts.staticGrid) { return; } + if (this.opts.staticGrid) return; this.enableMove(false); this.enableResize(false); this._triggerEvent('disable'); @@ -718,7 +718,7 @@ export class GridStack { * grid.enableResize(true); */ public enable(): GridStack { - if (this.opts.staticGrid) { return; } + if (this.opts.staticGrid) return; this.enableMove(true); this.enableResize(true); this._triggerEvent('enable'); @@ -733,7 +733,7 @@ export class GridStack { * doEnable`s value by changing the disableDrag grid option (default: true). */ public enableMove(doEnable: boolean, includeNewWidgets = true): GridStack { - if (this.opts.staticGrid) { return this; } // can't move a static grid! + if (this.opts.staticGrid) return this; // can't move a static grid! this.getGridItems().forEach(el => this.movable(el, doEnable)); if (includeNewWidgets) { this.opts.disableDrag = !doEnable; @@ -748,7 +748,7 @@ export class GridStack { * doEnable`s value by changing the disableResize grid option (default: true). */ public enableResize(doEnable: boolean, includeNewWidgets = true): GridStack { - if (this.opts.staticGrid) { return this; } // can't size a static grid! + if (this.opts.staticGrid) return this; // can't size a static grid! this.getGridItems().forEach(el => this.resizable(el, doEnable)); if (includeNewWidgets) { this.opts.disableResize = !doEnable; @@ -978,7 +978,7 @@ export class GridStack { * @param val if true the grid become static. */ public setStatic(val: boolean): GridStack { - if (this.opts.staticGrid === val) { return this; } + if (this.opts.staticGrid === val) return this; this.opts.staticGrid = val; this.engine.nodes.forEach(n => this._prepareDragDropByNode(n)); // either delete Drag&drop or initialize it this._setStaticClass(); @@ -1002,7 +1002,7 @@ export class GridStack { } GridStack.getElements(els).forEach(el => { - if (!el || !el.gridstackNode) { return; } + if (!el || !el.gridstackNode) return; let n = el.gridstackNode; let w = {...opt}; // make a copy we can modify in case they re-use it or multiple items delete w.autoPosition; @@ -1111,7 +1111,7 @@ export class GridStack { /** @internal */ private _triggerChangeEvent(): GridStack { - if (this.engine.batchMode) { return this; } + if (this.engine.batchMode) return this; let elements = this.engine.getDirtyNodes(true); // verify they really changed if (elements && elements.length) { if (!this._ignoreLayoutsNodeChange) { @@ -1125,7 +1125,7 @@ export class GridStack { /** @internal */ private _triggerAddEvent(): GridStack { - if (this.engine.batchMode) { return this } + if (this.engine.batchMode) return this; if (this.engine.addedNodes && this.engine.addedNodes.length > 0) { if (!this._ignoreLayoutsNodeChange) { this.engine.layoutsNodesChange(this.engine.addedNodes); @@ -1140,7 +1140,7 @@ export class GridStack { /** @internal */ public _triggerRemoveEvent(): GridStack { - if (this.engine.batchMode) { return this; } + if (this.engine.batchMode) return this; if (this.engine.removedNodes && this.engine.removedNodes.length > 0) { this._triggerEvent('removed', this.engine.removedNodes); this.engine.removedNodes = []; @@ -1189,7 +1189,7 @@ export class GridStack { // insert style to parent (instead of 'head' by default) to support WebComponent let styleLocation = this.opts.styleInHead ? undefined : this.el.parentNode as HTMLElement; this._styles = Utils.createStylesheet(id, styleLocation); - if (!this._styles) { return this; } + if (!this._styles) return this; this._styles._id = id; this._styles._max = 0; @@ -1231,7 +1231,7 @@ export class GridStack { /** @internal */ private _updateContainerHeight(): GridStack { - if (!this.engine || this.engine.batchMode) { return this; } + if (!this.engine || this.engine.batchMode) return this; let row = this.getRow(); // checks for minRow already // check for css min height let cssMinHeight = parseInt(getComputedStyle(this.el)['min-height']); @@ -1248,7 +1248,7 @@ export class GridStack { } let cellHeight = this.opts.cellHeight as number; let unit = this.opts.cellHeightUnit; - if (!cellHeight) { return this } + if (!cellHeight) return this; this.el.style.height = row * cellHeight + unit; return this; } @@ -1338,7 +1338,7 @@ export class GridStack { // remove any key not found (null or false which is default) for (const key in node) { - if (!node.hasOwnProperty(key)) { return; } + if (!node.hasOwnProperty(key)) return; if (!node[key] && node[key] !== 0) { // 0 can be valid value (x,y only really) delete node[key]; } @@ -1379,12 +1379,12 @@ export class GridStack { } if (!this.opts.disableOneColumnMode && this.el.clientWidth <= this.opts.minWidth) { - if (this._oneColumnMode) { return this } + if (this._oneColumnMode) return this; this._oneColumnMode = true; this.column(1); this._resizeNestedGrids(this.el); } else { - if (!this._oneColumnMode) { return this } + if (!this._oneColumnMode) return this; delete this._oneColumnMode; this.column(this._prevColumn); this._resizeNestedGrids(this.el); @@ -1497,25 +1497,25 @@ export class GridStack { * @param els widget or selector to modify. * @param val if true widget will be draggable. */ - public movable(els: GridStackElement, val: boolean): GridStack { return this; } + public movable(els: GridStackElement, val: boolean): GridStack { return this } /** * Enables/Disables resizing. No-op for static grids. * @param els widget or selector to modify * @param val if true widget will be resizable. */ - public resizable(els: GridStackElement, val: boolean): GridStack { return this; } + public resizable(els: GridStackElement, val: boolean): GridStack { return this } /** @internal called to add drag over support to support widgets */ - public _setupAcceptWidget(): GridStack { return this; } + public _setupAcceptWidget(): GridStack { return this } /** @internal called to setup a trash drop zone if the user specifies it */ - public _setupRemoveDrop(): GridStack { return this; } + public _setupRemoveDrop(): GridStack { return this } /** @internal */ - public _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { return this; } + public _setupRemovingTimeout(el: GridItemHTMLElement): GridStack { return this } /** @internal */ - public _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { return this; } + public _clearRemovingTimeout(el: GridItemHTMLElement): GridStack { return this } /** @internal call to setup dragging in from the outside (say toolbar), with options */ public _setupDragIn(): GridStack {return this; } /** @internal prepares the element for drag&drop **/ - public _prepareDragDropByNode(node: GridStackNode): GridStack { return this; } + public _prepareDragDropByNode(node: GridStackNode): GridStack { return this } // 2.x API that just calls the new and better update() - keep those around for backward compat only... /** @internal */ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 43e46059c..9af36259a 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -38,7 +38,7 @@ export abstract class DDBaseImplement { } public triggerEvent(eventName: string, event: Event): boolean|void { - if (this.disabled) { return; } + if (this.disabled) return; if (!this._eventRegister) {return; } // used when destroy before triggerEvent fire if (this._eventRegister[eventName]) { return this._eventRegister[eventName](event); diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index bd5479a1b..b2cf79cb2 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -50,14 +50,14 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt } public enable(): void { - if (!this.disabled) { return; } + if (!this.disabled) return; super.enable(); this.el.classList.remove('ui-droppable-disabled'); this.el.addEventListener('dragenter', this._dragEnter); } public disable(): void { - if (this.disabled) { return; } + if (this.disabled) return; super.disable(); this.el.classList.add('ui-droppable-disabled'); this.el.removeEventListener('dragenter', this._dragEnter); @@ -107,7 +107,7 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal called when the item is leaving our area, stop tracking if we had acceptable item */ private _dragLeave(event: DragEvent): void { - if (this.el.contains(event.relatedTarget as HTMLElement)) { return; } + if (this.el.contains(event.relatedTarget as HTMLElement)) return; this._removeLeaveCallbacks(); if (this.acceptable) { event.preventDefault(); @@ -121,7 +121,7 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal item is being dropped on us - call the client drop event */ private _drop(event: DragEvent): void { - if (!this.acceptable) { return; } // should not have received event... + if (!this.acceptable) return; // should not have received event... event.preventDefault(); const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); if (this.option.drop) { diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 615305d47..1d295a209 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -133,7 +133,7 @@ export class GridStackDDNative extends GridStackDD { /** @internal returns a list of DD elements, creating them on the fly by default */ private _getDDElements(els: GridStackElement, create = true): DDElement[] { let hosts = Utils.getElements(els) as DDElementHost[]; - if (!hosts.length) { return []; } + if (!hosts.length) return []; let list = hosts.map(e => e.ddElement || (create ? DDElement.init(e) : null)); if (!create) { list.filter(d => d); } // remove nulls return list; diff --git a/src/utils.ts b/src/utils.ts index 81da00fc6..0bc9b10fe 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -72,7 +72,7 @@ export class Utils { /** convert a potential selector into actual single element */ static getElement(els: GridStackElement): HTMLElement { if (typeof els === 'string') { - if (!els.length) { return null} + if (!els.length) return null; if (els[0] === '#') { return document.getElementById(els.substring(1)); } @@ -198,7 +198,7 @@ export class Utils { sources.forEach(source => { for (const key in source) { - if (!source.hasOwnProperty(key)) { return; } + if (!source.hasOwnProperty(key)) return; if (target[key] === null || target[key] === undefined) { target[key] = source[key]; } else if (typeof source[key] === 'object' && typeof target[key] === 'object') { @@ -213,12 +213,12 @@ export class Utils { /** given 2 objects return true if they have the same values. Checks for Object {} having same fields and values (just 1 level down) */ static same(a: unknown, b: unknown): boolean { - if (typeof a !== 'object') { return a == b; } - if (typeof a !== typeof b) { return false; } + if (typeof a !== 'object') return a == b; + if (typeof a !== typeof b) return false; // else we have object, check just 1 level deep for being same things... - if (Object.keys(a).length !== Object.keys(b).length) { return false; } + if (Object.keys(a).length !== Object.keys(b).length) return false; for (const key in a) { - if (a[key] !== b[key]) { return false; } + if (a[key] !== b[key]) return false; } return true; } From 8a5adae9ec19a57cfc4099cc26225e53da738dea Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 16 Jan 2021 09:24:29 -0800 Subject: [PATCH 0384/1298] column-N class fix * fix for #1572 * we now automatically add `.grid-stack-N` class when user specify column: N option for CSS to work. --- README.md | 2 +- doc/CHANGES.md | 7 ++-- spec/e2e/html/1572_one_column.html | 54 ++++++++++++++++++++++++++++++ src/gridstack.ts | 3 ++ 4 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 spec/e2e/html/1572_one_column.html diff --git a/README.md b/README.md index 5d24f630c..e6835d2e9 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,7 @@ GridStack.init( {column: N} );
    ...
    ``` -Note: we added `.grid-stack-N` and include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). +Note: class `.grid-stack-N` was added and we include `gridstack-extra.css` which defines CSS for grids with custom [2-11] columns. Anything more and you'll need to generate the SASS/CSS yourself (see next). See example: [2 grids demo](http://gridstack.github.io/gridstack.js/demo/two.html) with 6 columns diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 2a39b677a..117e1d1db 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -47,11 +47,12 @@ Change log ## 3.1.4-dev -- TBD +- fix [1572](https://github.com/gridstack/gridstack.js/issues/1572) `column: N` option now sets CSS class + ## 3.1.4 (2021-1-11) -- fix [1557](https://github.com/gridstack/gridstack.js/pull/1557) fix no-drop cursor on windows when dragging within a default grid (no external drag in) -- fix [1541](https://github.com/gridstack/gridstack.js/pull/1541) fix Safari H5 delay when dropping items +- fix [1557](https://github.com/gridstack/gridstack.js/issues/1557) fix no-drop cursor on windows when dragging within a default grid (no external drag in) +- fix [1541](https://github.com/gridstack/gridstack.js/issues/1541) fix Safari H5 delay when dropping items ## 3.1.3 (2021-1-2) diff --git a/spec/e2e/html/1572_one_column.html b/spec/e2e/html/1572_one_column.html new file mode 100644 index 000000000..4d354a847 --- /dev/null +++ b/spec/e2e/html/1572_one_column.html @@ -0,0 +1,54 @@ + + + + + + + 1 column demo + + + + + + + +
    +

    1 column demo

    + +

    +
    +
    + + + + diff --git a/src/gridstack.ts b/src/gridstack.ts index 202ed1ba2..b9ab2328a 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -338,6 +338,9 @@ export class GridStack { this.placeholder.appendChild(placeholderChild); this._updateStyles(); + if (this.opts.column != 12) { + this.el.classList.add('grid-stack-' + this.opts.column); + } this._setupDragIn(); this._setupRemoveDrop(); From f63d2407a3f216c5b5b4536fab4e9ef141dfb311 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 16 Jan 2021 09:36:37 -0800 Subject: [PATCH 0385/1298] column-N class fix test * test for #1572 --- spec/gridstack-spec.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/gridstack-spec.ts b/spec/gridstack-spec.ts index 93039f86e..c4885bf09 100644 --- a/spec/gridstack-spec.ts +++ b/spec/gridstack-spec.ts @@ -247,6 +247,19 @@ describe('gridstack', function() { grid.column(12); expect(grid.getColumn()).toBe(12); }); + it('should set construct CSS class', function() { + let grid = GridStack.init({column: 1}); + expect(grid.el.classList.contains('grid-stack-1')).toBe(true); + grid.column(2); + expect(grid.el.classList.contains('grid-stack-1')).toBe(false); + expect(grid.el.classList.contains('grid-stack-2')).toBe(true); + }); + it('should set CSS class', function() { + let grid = GridStack.init(); + expect(grid.el.classList.contains('grid-stack')).toBe(true); + grid.column(1); + expect(grid.el.classList.contains('grid-stack-1')).toBe(true); + }); it('should SMALL change column number, no relayout', function() { let options = { column: 12 From 905d5d7825a05cd3d3bb64f801014d6f3e3ac9bd Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 16 Jan 2021 10:58:26 -0800 Subject: [PATCH 0386/1298] don't allow drop when grid is full * fix #1571 * dragenter checks for full grid using `willItFit()` before accepting an item * also cleanup h5 dd-droppable to not add listner or remove them uncessarly. --- doc/CHANGES.md | 1 + spec/e2e/html/1571_drop_onto_full.html | 114 +++++++++++++++++++++++++ src/gridstack-dd.ts | 20 +++-- src/h5/dd-droppable.ts | 53 ++++++------ 4 files changed, 154 insertions(+), 34 deletions(-) create mode 100644 spec/e2e/html/1571_drop_onto_full.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 117e1d1db..93ce6e006 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -48,6 +48,7 @@ Change log ## 3.1.4-dev - fix [1572](https://github.com/gridstack/gridstack.js/issues/1572) `column: N` option now sets CSS class +- fix [1571](https://github.com/gridstack/gridstack.js/issues/1571) don't allow drop when grid is full ## 3.1.4 (2021-1-11) diff --git a/spec/e2e/html/1571_drop_onto_full.html b/spec/e2e/html/1571_drop_onto_full.html new file mode 100644 index 000000000..4ad42494a --- /dev/null +++ b/spec/e2e/html/1571_drop_onto_full.html @@ -0,0 +1,114 @@ + + + + + + + drop onto full + + + + + + + + + +
    +

    drop onto full

    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + + + diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index efb1afc90..03cc6b712 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -127,14 +127,22 @@ GridStack.prototype._setupAcceptWidget = function(): GridStack { .droppable(this.el, { accept: (el: GridItemHTMLElement) => { let node: GridStackNode = el.gridstackNode; - if (node && node.grid === this) { - return true; // set accept drop to true on ourself (which we ignore) so we don't get "can't drop" icon in HTML5 mode while moving - } + // set accept drop to true on ourself (which we ignore) so we don't get "can't drop" icon in HTML5 mode while moving + if (node && node.grid === this) return true; + // check for accept method or class matching + let canAccept = true; if (typeof this.opts.acceptWidgets === 'function') { - return this.opts.acceptWidgets(el); + canAccept = this.opts.acceptWidgets(el); + } else { + let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string); + canAccept = el.matches(selector); + } + // finally check to make sure we actually have space left #1571 + if (canAccept && node && this.opts.maxRow) { + let n = {w: node.w, h: node.h, minW: node.minW, minH: node.minH}; // only width/height matters + canAccept = this.engine.willItFit(n); } - let selector = (this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets as string); - return el.matches(selector); + return canAccept; } }) .on(this.el, 'dropover', (event, el: GridItemHTMLElement) => { diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index b2cf79cb2..576a29827 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -24,7 +24,7 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt public option: DDDroppableOpt; /** @internal */ - private acceptable: boolean = null; + private moving: boolean; constructor(el: HTMLElement, opts: DDDroppableOpt = {}) { super(); @@ -56,22 +56,21 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt this.el.addEventListener('dragenter', this._dragEnter); } - public disable(): void { + public disable(forDestroy=false): void { if (this.disabled) return; super.disable(); - this.el.classList.add('ui-droppable-disabled'); + if (!forDestroy) this.el.classList.add('ui-droppable-disabled'); this.el.removeEventListener('dragenter', this._dragEnter); } public destroy(): void { + if (this.moving) { + this._removeLeaveCallbacks(); + } + this.disable(true); this.el.classList.remove('ui-droppable'); - if (this.disabled) { - this.el.classList.remove('ui-droppable-disabled'); - this.el.removeEventListener('dragenter', this._dragEnter); - this.el.removeEventListener('dragover', this._dragOver); - this.el.removeEventListener('drop', this._drop); - this.el.removeEventListener('dragleave', this._dragLeave); - } + this.el.classList.remove('ui-droppable-disabled'); + delete this.moving; super.destroy(); } @@ -83,33 +82,32 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal called when the cursor enters our area - prepare for a possible drop and track leaving */ private _dragEnter(event: DragEvent): void { - this.el.removeEventListener('dragenter', this._dragEnter); - this.acceptable = this._canDrop(); - if (this.acceptable) { - event.preventDefault(); - const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); - if (this.option.over) { - this.option.over(ev, this._ui(DDManager.dragElement)) - } - this.triggerEvent('dropover', ev); - this.el.addEventListener('dragover', this._dragOver); - this.el.addEventListener('drop', this._drop); + if (!this._canDrop()) return; + this.moving = true; + + event.preventDefault(); + const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropover' }); + if (this.option.over) { + this.option.over(ev, this._ui(DDManager.dragElement)) } - this.el.classList.add('ui-droppable-over'); + this.triggerEvent('dropover', ev); + this.el.addEventListener('dragover', this._dragOver); + this.el.addEventListener('drop', this._drop); this.el.addEventListener('dragleave', this._dragLeave); + this.el.classList.add('ui-droppable-over'); } - /** @internal called when an acceptable to drop item is being dragged over - do nothing but eat the event */ + /** @internal called when an moving to drop item is being dragged over - do nothing but eat the event */ private _dragOver(event: DragEvent): void { event.preventDefault(); event.stopPropagation(); } - /** @internal called when the item is leaving our area, stop tracking if we had acceptable item */ + /** @internal called when the item is leaving our area, stop tracking if we had moving item */ private _dragLeave(event: DragEvent): void { if (this.el.contains(event.relatedTarget as HTMLElement)) return; this._removeLeaveCallbacks(); - if (this.acceptable) { + if (this.moving) { event.preventDefault(); const ev = DDUtils.initEvent(event, { target: this.el, type: 'dropout' }); if (this.option.out) { @@ -121,7 +119,7 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt /** @internal item is being dropped on us - call the client drop event */ private _drop(event: DragEvent): void { - if (!this.acceptable) return; // should not have received event... + if (!this.moving) return; // should not have received event... event.preventDefault(); const ev = DDUtils.initEvent(event, { target: this.el, type: 'drop' }); if (this.option.drop) { @@ -135,11 +133,10 @@ export class DDDroppable extends DDBaseImplement implements HTMLElementExtendOpt private _removeLeaveCallbacks() { this.el.removeEventListener('dragleave', this._dragLeave); this.el.classList.remove('ui-droppable-over'); - if (this.acceptable) { + if (this.moving) { this.el.removeEventListener('dragover', this._dragOver); this.el.removeEventListener('drop', this._drop); } - this.el.addEventListener('dragenter', this._dragEnter); } /** @internal */ From f0fa426f304eda7a9c6b3612405e0df7ca9e5d46 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 17 Jan 2021 08:42:45 -0800 Subject: [PATCH 0387/1298] test for #1570 --- spec/e2e/html/1570_drag_bottom_max_row.html | 119 ++++++++++++++++++++ spec/e2e/html/1571_drop_onto_full.html | 9 +- 2 files changed, 123 insertions(+), 5 deletions(-) create mode 100644 spec/e2e/html/1570_drag_bottom_max_row.html diff --git a/spec/e2e/html/1570_drag_bottom_max_row.html b/spec/e2e/html/1570_drag_bottom_max_row.html new file mode 100644 index 000000000..44f0a529c --- /dev/null +++ b/spec/e2e/html/1570_drag_bottom_max_row.html @@ -0,0 +1,119 @@ + + + + + + + drop onto full + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + diff --git a/spec/e2e/html/1571_drop_onto_full.html b/spec/e2e/html/1571_drop_onto_full.html index 4ad42494a..537c6cf0a 100644 --- a/spec/e2e/html/1571_drop_onto_full.html +++ b/spec/e2e/html/1571_drop_onto_full.html @@ -69,12 +69,12 @@

    drop onto full

    @@ -82,8 +82,7 @@

    drop onto full

    @@ -89,7 +88,7 @@ let options2 = { disableOneColumnMode: true, minRow: 3, - // maxRow: 3, // change this to show issue + maxRow: 3, // change this to show issue acceptWidgets: true, removable: true, removeTimeout: 0, diff --git a/spec/e2e/html/1572_one_column.html b/spec/e2e/html/1572_one_column.html index 4d354a847..052bddae8 100644 --- a/spec/e2e/html/1572_one_column.html +++ b/spec/e2e/html/1572_one_column.html @@ -30,7 +30,7 @@

    1 column demo

    let count = 0; let items = [{x: 0, y: 0, w: 1, h:1, content: String(count++)}]; - let grid = GridStack.init({column: 1}); + let grid = GridStack.init({column: 1, minRow: 1}); grid.load(items); addEvents(grid); diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 03cc6b712..69b1f14df 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -392,7 +392,7 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid /** called when item is being dragged/resized */ let dragOrResize = (event: Event, ui: DDUIData): void => { let x = Math.round(ui.position.left / cellWidth); - let y = Math.floor((ui.position.top + cellHeight / 2) / cellHeight); + let y = Math.round(ui.position.top / cellHeight); let w: number; let h: number; @@ -401,7 +401,7 @@ GridStack.prototype._prepareDragDropByNode = function(node: GridStackNode): Grid node._prevYPix = ui.position.top; Utils.updateScrollPosition(el, ui.position, distance); // if inTrash, outside of the bounds or added to another grid (#393) temporarily remove it from us - if (el.dataset.inTrashZone || x < 0 || x >= this.engine.column || y < 0 || (!this.engine.float && y > this.engine.getRow()) || node._added) { + if (el.dataset.inTrashZone || node._added || this.engine.isOutside(x, y, node)) { if (node._temporaryRemoved) return; if (this.opts.removable === true) { this._setupRemovingTimeout(el); diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index 765c98863..e5e4e2f7e 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -81,7 +81,7 @@ export class GridStackEngine { nn = {x: 0, y: node.y, w: this.column, h: node.h}; } while (true) { - let collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn}); + let collisionNode = this.collide(node, nn); if (!collisionNode) return this; let moved; if (collisionNode.locked) { @@ -96,12 +96,14 @@ export class GridStackEngine { } } + /** return any intercepted node with the given area, skipping the passed in node (usually self) */ + public collide(node: GridStackNode, area: GridStackNode = node): GridStackNode { + return this.nodes.find(n => n !== node && Utils.isIntercepted(n, area)); + } + public isAreaEmpty(x: number, y: number, w: number, h: number): boolean { let nn: GridStackNode = {x: x || 0, y: y || 0, w: w || 1, h: h || 1}; - let collisionNode = this.nodes.find(n => { - return Utils.isIntercepted(n, nn); - }); - return !collisionNode; + return !this.collide(nn); } /** re-layout grid items to reclaim any empty space */ @@ -153,9 +155,7 @@ export class GridStackEngine { let newY = n.y; while (newY >= n._packY) { let box: GridStackWidget = {x: n.x, y: newY, w: n.w, h: n.h}; - let collisionNode = this.nodes - .slice(0, i) - .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY}); + let collisionNode = this.nodes.slice(0, i).find(bn => Utils.isIntercepted(box, bn)); if (!collisionNode) { n._dirty = true; n.y = newY; @@ -171,10 +171,8 @@ export class GridStackEngine { let canBeMoved = i === 0; let box: GridStackWidget = {x: n.x, y: newY, w: n.w, h: n.h}; if (i > 0) { - let collisionNode = this.nodes - .slice(0, i) - .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY}); - canBeMoved = collisionNode === undefined; + let collisionNode = this.nodes.slice(0, i).find(bn => Utils.isIntercepted(box, bn)); + canBeMoved = !collisionNode; } if (!canBeMoved) { break; } @@ -312,7 +310,7 @@ export class GridStackEngine { continue; } let box = {x, y, w: node.w, h: node.h}; - if (!this.nodes.find(n => Utils.isIntercepted(box, n), {x, y, node})) { + if (!this.nodes.find(n => Utils.isIntercepted(box, n))) { node.x = x; node.y = y; delete node.autoPosition; // found our slot @@ -409,6 +407,31 @@ export class GridStackEngine { return clone.getRow() <= this.maxRow; } + /** return true if the passed in node (x,y) is being dragged outside of the grid, and not added to bottom */ + public isOutside(x: number, y: number, node: GridStackNode): boolean { + // simple outside boundaries + if (x < 0 || x >= this.column || y < 0) return true; + if (this.maxRow) return (y >= this.maxRow); + else if (this.float) return false; // infinite grow with no maxRow + + // see if dragging PAST bottom (row+1) + let row = this.getRow(); + if (y < row || y === 0) return false; + if (y > row) return true; + // else check to see if we can add that item to the bottom... (y == row) + if (!node._temporaryRemoved) { + let clone = new GridStackEngine({ + column: this.column, + float: this.float, + nodes: this.nodes.filter(n => n !== node).map(n => {return {...n}}) + }); + let nn = {...node, x, y}; + clone.addNode(nn); + return nn.y === node.y && nn.x === node.x; // didn't actually move, so last row was a drag out and not a new place... + } + return node._temporaryRemoved; // if still outside so we don't flicker back & forth + } + public isNodeChangedPosition(node: GridStackNode, x: number, y: number, w?: number, h?: number): boolean { if (typeof x !== 'number') { x = node.x; } if (typeof y !== 'number') { y = node.y; } From 0c29630215843ac543f9f05ca8b3bfa33386103a Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Tue, 19 Jan 2021 19:01:20 -0800 Subject: [PATCH 0389/1298] fix cellHeight() updating CSS for # of rows * fix #1579 * make sure to re-create the CSS with actual numer of rows needed when changing cell heights --- doc/CHANGES.md | 1 + src/gridstack.ts | 2 +- src/utils.ts | 3 +-- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 11ae5734e..f2a370574 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -50,6 +50,7 @@ Change log - fix [1572](https://github.com/gridstack/gridstack.js/issues/1572) `column: N` option now sets CSS class - fix [1571](https://github.com/gridstack/gridstack.js/issues/1571) don't allow drop when grid is full - fix [1570](https://github.com/gridstack/gridstack.js/issues/1570) easier to drag out/in from below +- fix [1579](https://github.com/gridstack/gridstack.js/issues/1579) `cellHeight()` not updating CSS correctly ## 3.1.4 (2021-1-11) diff --git a/src/gridstack.ts b/src/gridstack.ts index b9ab2328a..4db19364c 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -582,7 +582,7 @@ export class GridStack { this.opts.cellHeight = data.h; if (update) { - this._updateStyles(true); // true = force re-create + this._updateStyles(true, this.getRow()); // true = force re-create, for that # of rows } this._resizeNestedGrids(this.el); return this; diff --git a/src/utils.ts b/src/utils.ts index 0bc9b10fe..4bda1cc7f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -147,8 +147,7 @@ export class Utils { /** removed the given stylesheet id */ static removeStylesheet(id: string): void { let el = document.querySelector('STYLE[gs-style-id=' + id + ']'); - if (!el || !el.parentNode) return; - el.parentNode.removeChild(el); + if (el && el.parentNode) el.remove(); } /** inserts a CSS rule */ From 9cb97818a0b5df7c17bda29abfdec4f42c29f2c0 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Wed, 20 Jan 2021 21:32:54 -0800 Subject: [PATCH 0390/1298] test demo cleanup, remove $('selection') JQ code --- demo/nested.html | 2 +- demo/two.html | 2 +- spec/e2e/html/1102-button-between-grids.html | 14 ++------ spec/e2e/html/1142_change_event_missing.html | 5 +-- .../html/1143_nested_acceptWidget_types.html | 33 +++++++++---------- src/types.ts | 5 +-- 6 files changed, 26 insertions(+), 35 deletions(-) diff --git a/demo/nested.html b/demo/nested.html index b665e3f06..e3944fb7f 100644 --- a/demo/nested.html +++ b/demo/nested.html @@ -20,7 +20,7 @@

    Nested grids demo

    This example uses new v3.1 API to load the entire nested grid from JSON, and shows dragging between nested grid items (pink) vs dragging higher grid items (green)

    -

    Note: initial v3.0.0 HTML5 release doesn't support 'dragOut:false' constrain so this uses JQ version for now. If you don't need the nested2 behavior I suggest you use h5 version.

    +

    Note: initial v3.0.0 HTML5 release doesn't support 'dragOut:false' constrain so this uses JQ version for now, otherwise recommend you use h5 version.

    Add Widget Grid1 Add Widget Grid2

    diff --git a/demo/two.html b/demo/two.html index ad5c9f656..0054e4169 100644 --- a/demo/two.html +++ b/demo/two.html @@ -87,7 +87,7 @@

    Two grids demo

    cellHeight: 70, disableOneColumnMode: true, float: false, - dragIn: '.sidebar .grid-stack-item', // class that can be dragged from outside + dragIn: '.sidebar .grid-stack-item', // add draggable to class dragInOptions: { revert: 'invalid', scroll: false, appendTo: 'body', helper: 'clone' }, // clone removable: '.trash', // drag-out delete class removeTimeout: 100, diff --git a/spec/e2e/html/1102-button-between-grids.html b/spec/e2e/html/1102-button-between-grids.html index f53b80570..f78b08862 100644 --- a/spec/e2e/html/1102-button-between-grids.html +++ b/spec/e2e/html/1102-button-between-grids.html @@ -14,30 +14,20 @@

    lose functionality when dragged


    -
    button1
    +
    button1


    -
    button2
    +
    button2
    diff --git a/spec/e2e/html/1142_change_event_missing.html b/spec/e2e/html/1142_change_event_missing.html index 1f81aa5ed..842764a66 100644 --- a/spec/e2e/html/1142_change_event_missing.html +++ b/spec/e2e/html/1142_change_event_missing.html @@ -6,9 +6,10 @@ 1142 demo - + +

    JQ test case with click to remove

    1 click to delete
    2 missing change event
    @@ -27,7 +28,7 @@ $('.grid-stack .grid-stack-item').click(function(e) { let item = $(e.currentTarget).closest('.grid-stack-item'); - grid.removeWidget(item); + grid.removeWidget(item.get(0)); }); diff --git a/spec/e2e/html/1143_nested_acceptWidget_types.html b/spec/e2e/html/1143_nested_acceptWidget_types.html index cd03cf438..56d5259c6 100644 --- a/spec/e2e/html/1143_nested_acceptWidget_types.html +++ b/spec/e2e/html/1143_nested_acceptWidget_types.html @@ -23,6 +23,7 @@ +

    show dragging into sub grid

    @@ -37,15 +38,7 @@
    This nested grid accepts new widget with class "newWidget"
    The parent grid also accepts new widget but with a different class 'otherWidgetType'
      -
    -
    1
    -
    2
    -
    3
    -
    4
    -
    5
    -
    6
    -
    - +
    @@ -54,20 +47,26 @@ diff --git a/src/types.ts b/src/types.ts index 5eea5a492..ee21786bc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -65,7 +65,8 @@ export interface GridStackOptions { /** number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns */ column?: number; - /** additional class on top of '.grid-stack' (which is required for our CSS) to differentiate this instance */ + /** additional class on top of '.grid-stack' (which is required for our CSS) to differentiate this instance. + Note: only used by addGrid(), else your element should have the needed class */ class?: string; /** disallows dragging of widgets (default?: false) */ @@ -98,7 +99,7 @@ export interface GridStackOptions { /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */ handleClass?: string; - /** widget class (default?: 'grid-stack-item') */ + /** additional widget class (default?: 'grid-stack-item') */ itemClass?: string; /** From c455ef26c4379c62511cca3ef8fffae7da9f4414 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 23 Jan 2021 09:34:11 -0800 Subject: [PATCH 0391/1298] H5 draggable by actual div handle * fix #1581 * set draggabble to actual div handle rather than entire item so content can also respond to dragging. * no longer need to have mousedown to check for clikc on actual drag area... --- doc/CHANGES.md | 1 + spec/e2e/html/1581_drag_by_header_h5.html | 48 +++++++++++++++++++++++ src/h5/dd-draggable.ts | 29 +++++--------- 3 files changed, 58 insertions(+), 20 deletions(-) create mode 100644 spec/e2e/html/1581_drag_by_header_h5.html diff --git a/doc/CHANGES.md b/doc/CHANGES.md index f2a370574..da5780301 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -51,6 +51,7 @@ Change log - fix [1571](https://github.com/gridstack/gridstack.js/issues/1571) don't allow drop when grid is full - fix [1570](https://github.com/gridstack/gridstack.js/issues/1570) easier to drag out/in from below - fix [1579](https://github.com/gridstack/gridstack.js/issues/1579) `cellHeight()` not updating CSS correctly +- fix [1581](https://github.com/gridstack/gridstack.js/issues/1581) H5 draggable by actual div handle rather than entire item (let content respond to drag as well) ## 3.1.4 (2021-1-11) diff --git a/spec/e2e/html/1581_drag_by_header_h5.html b/spec/e2e/html/1581_drag_by_header_h5.html new file mode 100644 index 000000000..ed29ec3f7 --- /dev/null +++ b/spec/e2e/html/1581_drag_by_header_h5.html @@ -0,0 +1,48 @@ + + + + drag by header + + + + + +
    +

    dragging by header not conflicting with content drag (Sortable.js)

    +

    sortable.js only

    +
    +
    +
    MOVE ME !!!! 11111 11111
    +
    MOVE ME !!!! 22222 22222
    +
    MOVE ME !!!! 33333 33333
    +
    +
    +
    +
    + +
    + + + diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index c873f9c8d..df6ef1e57 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -66,8 +66,10 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt super(); this.el = el; this.option = option; + // get the element that is actually supposed to be dragged by + let className = option.handle.substring(1); + this.dragEl = el.classList.contains(className) ? el : el.querySelector(option.handle) || el; // create var event binding so we can easily remove and still look like TS methods (unlike anonymous functions) - this._mouseDown = this._mouseDown.bind(this); this._dragStart = this._dragStart.bind(this); this._drag = this._drag.bind(this); this._dragEnd = this._dragEnd.bind(this); @@ -85,20 +87,18 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt public enable(): void { super.enable(); - this.el.draggable = true; + this.dragEl.draggable = true; + this.dragEl.addEventListener('dragstart', this._dragStart); this.el.classList.remove('ui-draggable-disabled'); this.el.classList.add('ui-draggable'); - this.el.addEventListener('mousedown', this._mouseDown); - this.el.addEventListener('dragstart', this._dragStart); } public disable(forDestroy = false): void { super.disable(); - this.el.removeAttribute('draggable'); + this.dragEl.removeAttribute('draggable'); + this.dragEl.removeEventListener('dragstart', this._dragStart); this.el.classList.remove('ui-draggable'); if (!forDestroy) this.el.classList.add('ui-draggable-disabled'); - this.el.removeEventListener('mousedown', this._mouseDown); - this.el.removeEventListener('dragstart', this._dragStart); } public destroy(): void { @@ -120,18 +120,8 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt return this; } - /** @internal call when mouse goes down before a dragstart happens */ - private _mouseDown(event: MouseEvent): void { - // make sure we are clicking on a drag handle or child of it... - let className = this.option.handle.substring(1); - let el = event.target as HTMLElement; - while (el && !el.classList.contains(className)) { el = el.parentElement; } - this.dragEl = el; - } - /** @internal */ private _dragStart(event: DragEvent): void { - if (!this.dragEl) { event.preventDefault(); return; } DDManager.dragElement = this; this.helper = this._createHelper(event); this._setupHelperContainmentStyle(); @@ -152,7 +142,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt private _setupDragFollowNodeNotifyStart(ev: Event): DDDraggable { this._setupHelperStyle(); document.addEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption); - this.el.addEventListener('dragend', this._dragEnd); + this.dragEl.addEventListener('dragend', this._dragEnd); if (this.option.start) { this.option.start(ev, this.ui()); } @@ -186,7 +176,7 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt cancelAnimationFrame(this.paintTimer); } document.removeEventListener('dragover', this._drag, DDDraggable.dragEventListenerOption); - this.el.removeEventListener('dragend', this._dragEnd); + this.dragEl.removeEventListener('dragend', this._dragEnd); } this.dragging = false; this.helper.classList.remove('ui-draggable-dragging'); @@ -203,7 +193,6 @@ export class DDDraggable extends DDBaseImplement implements HTMLElementExtendOpt this.triggerEvent('dragstop', ev); delete DDManager.dragElement; delete this.helper; - delete this.dragEl; } /** @internal create a clone copy (or user defined method) of the original drag item if set */ From 71c8dda7a01112a0cb7ca670654f1cc8945cae1d Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 23 Jan 2021 09:37:41 -0800 Subject: [PATCH 0392/1298] rev 3.1.5 --- doc/CHANGES.md | 4 ++-- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index da5780301..d6c338d9c 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.4-dev](#314-dev) +- [3.1.5](#314-dev) - [3.1.4 (2021-1-11)](#314-2021-1-11) - [3.1.3 (2021-1-2)](#313-2021-1-2) - [3.1.2 (2020-12-7)](#312-2020-12-7) @@ -45,7 +45,7 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) -## 3.1.4-dev +## 3.1.5 (2021-1-23) - fix [1572](https://github.com/gridstack/gridstack.js/issues/1572) `column: N` option now sets CSS class - fix [1571](https://github.com/gridstack/gridstack.js/issues/1571) don't allow drop when grid is full diff --git a/package.json b/package.json index 35a955e42..d510b3fc0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.4-dev", + "version": "3.1.5", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 69b1f14df..47c9434f4 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.4-dev @preserve +// gridstack-GridStackDD.get().ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index e5b55fd1d..162ed5b4e 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.4-dev @preserve +// gridstack-ddi.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index e5e4e2f7e..c0e0ab936 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.4-dev @preserve +// gridstack-engine.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index a785a4518..6efcfc534 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.4-dev extra CSS for [2-11] columns (non default) + * gridstack 3.1.5 extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 9ab01d067..123761913 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.4-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.5 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 4db19364c..3499e3b46 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.4-dev @preserve +// gridstack.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 9af36259a..8ff9f5286 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.4-dev @preserve +// dd-base-impl.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index df6ef1e57..99f6f5c54 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.4-dev @preserve +// dd-draggable.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 576a29827..5ae25e8ee 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.4-dev @preserve +// dd-droppable.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index 8ff879b7a..7f2259c57 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.4-dev @preserve +// dd-elements.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index dae1374b9..991273b9d 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.4-dev @preserve +// dd-manager.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index bf07ceb8e..bca2522b8 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.4-dev @preserve +// dd-resizable-handle.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index d5a5c5d7f..289ddaa24 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.4-dev @preserve +// dd-resizable.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 12c82d5a5..6c43fb6be 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.4-dev @preserve +// dd-utils.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 1d295a209..2d453434c 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.4-dev @preserve +// gridstack-dd-native.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index 61de53b89..99a97b826 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.4-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.5 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index ba300c483..b0ea31206 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.4-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.5 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index 74ba63ca0..c543e3e88 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.4-dev - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.5 - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/types.ts b/src/types.ts index ee21786bc..a7a67d4c8 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.4-dev @preserve +// types.ts 3.1.5 @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index 4bda1cc7f..e5f63b6b5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.4-dev @preserve +// utils.ts 3.1.5 @preserve /** * https://gridstackjs.com/ From 5220f4cf4a52e82067267f463c53fdfdab243a1f Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sat, 23 Jan 2021 09:45:19 -0800 Subject: [PATCH 0393/1298] v3.1.5-dev --- doc/CHANGES.md | 6 +++++- package.json | 2 +- src/gridstack-dd.ts | 2 +- src/gridstack-ddi.ts | 2 +- src/gridstack-engine.ts | 2 +- src/gridstack-extra.scss | 2 +- src/gridstack.scss | 2 +- src/gridstack.ts | 2 +- src/h5/dd-base-impl.ts | 2 +- src/h5/dd-draggable.ts | 2 +- src/h5/dd-droppable.ts | 2 +- src/h5/dd-element.ts | 2 +- src/h5/dd-manager.ts | 2 +- src/h5/dd-resizable-handle.ts | 2 +- src/h5/dd-resizable.ts | 2 +- src/h5/dd-utils.ts | 2 +- src/h5/gridstack-dd-native.ts | 2 +- src/index-h5.ts | 2 +- src/index-jq.ts | 2 +- src/index-static.ts | 2 +- src/types.ts | 2 +- src/utils.ts | 2 +- 22 files changed, 26 insertions(+), 22 deletions(-) diff --git a/doc/CHANGES.md b/doc/CHANGES.md index d6c338d9c..6273a2e94 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,7 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* -- [3.1.5](#314-dev) +- [3.1.5 (2021-1-23)](#315-2021-1-23) - [3.1.4 (2021-1-11)](#314-2021-1-11) - [3.1.3 (2021-1-2)](#313-2021-1-2) - [3.1.2 (2020-12-7)](#312-2020-12-7) @@ -45,6 +45,10 @@ Change log - [v0.1.0 (2014-11-18)](#v010-2014-11-18) +## 3.1.5-dev + +- TBD + ## 3.1.5 (2021-1-23) - fix [1572](https://github.com/gridstack/gridstack.js/issues/1572) `column: N` option now sets CSS class diff --git a/package.json b/package.json index d510b3fc0..cded32286 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gridstack", - "version": "3.1.5", + "version": "3.1.5-dev", "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)", "main": "./dist/gridstack.js", "types": "./dist/gridstack.d.ts", diff --git a/src/gridstack-dd.ts b/src/gridstack-dd.ts index 47c9434f4..8edb468d0 100644 --- a/src/gridstack-dd.ts +++ b/src/gridstack-dd.ts @@ -1,4 +1,4 @@ -// gridstack-GridStackDD.get().ts 3.1.5 @preserve +// gridstack-GridStackDD.get().ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-ddi.ts b/src/gridstack-ddi.ts index 162ed5b4e..7c15aa278 100644 --- a/src/gridstack-ddi.ts +++ b/src/gridstack-ddi.ts @@ -1,4 +1,4 @@ -// gridstack-ddi.ts 3.1.5 @preserve +// gridstack-ddi.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts index c0e0ab936..7293ef33c 100644 --- a/src/gridstack-engine.ts +++ b/src/gridstack-engine.ts @@ -1,4 +1,4 @@ -// gridstack-engine.ts 3.1.5 @preserve +// gridstack-engine.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss index 6efcfc534..cdf82efd6 100644 --- a/src/gridstack-extra.scss +++ b/src/gridstack-extra.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.5 extra CSS for [2-11] columns (non default) + * gridstack 3.1.5-dev extra CSS for [2-11] columns (non default) * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.scss b/src/gridstack.scss index 123761913..8d2382b8e 100644 --- a/src/gridstack.scss +++ b/src/gridstack.scss @@ -1,5 +1,5 @@ /*! - * gridstack 3.1.5 required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css + * gridstack 3.1.5-dev required CSS for default 12 and 1 column Mode size. Use gridstack-extra.css for column [2-11], else see https://github.com/gridstack/gridstack.js#custom-columns-css * https://gridstackjs.com/ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov * gridstack.js may be freely distributed under the MIT license. diff --git a/src/gridstack.ts b/src/gridstack.ts index 3499e3b46..c20ce449b 100644 --- a/src/gridstack.ts +++ b/src/gridstack.ts @@ -1,4 +1,4 @@ -// gridstack.ts 3.1.5 @preserve +// gridstack.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-base-impl.ts b/src/h5/dd-base-impl.ts index 8ff9f5286..fde15f27f 100644 --- a/src/h5/dd-base-impl.ts +++ b/src/h5/dd-base-impl.ts @@ -1,4 +1,4 @@ -// dd-base-impl.ts 3.1.5 @preserve +// dd-base-impl.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-draggable.ts b/src/h5/dd-draggable.ts index 99f6f5c54..55d6ea677 100644 --- a/src/h5/dd-draggable.ts +++ b/src/h5/dd-draggable.ts @@ -1,4 +1,4 @@ -// dd-draggable.ts 3.1.5 @preserve +// dd-draggable.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-droppable.ts b/src/h5/dd-droppable.ts index 5ae25e8ee..b26535ea7 100644 --- a/src/h5/dd-droppable.ts +++ b/src/h5/dd-droppable.ts @@ -1,4 +1,4 @@ -// dd-droppable.ts 3.1.5 @preserve +// dd-droppable.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-element.ts b/src/h5/dd-element.ts index 7f2259c57..c8adae53a 100644 --- a/src/h5/dd-element.ts +++ b/src/h5/dd-element.ts @@ -1,4 +1,4 @@ -// dd-elements.ts 3.1.5 @preserve +// dd-elements.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-manager.ts b/src/h5/dd-manager.ts index 991273b9d..63d9b6efa 100644 --- a/src/h5/dd-manager.ts +++ b/src/h5/dd-manager.ts @@ -1,4 +1,4 @@ -// dd-manager.ts 3.1.5 @preserve +// dd-manager.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable-handle.ts b/src/h5/dd-resizable-handle.ts index bca2522b8..b25d38a31 100644 --- a/src/h5/dd-resizable-handle.ts +++ b/src/h5/dd-resizable-handle.ts @@ -1,4 +1,4 @@ -// dd-resizable-handle.ts 3.1.5 @preserve +// dd-resizable-handle.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-resizable.ts b/src/h5/dd-resizable.ts index 289ddaa24..6caa6a728 100644 --- a/src/h5/dd-resizable.ts +++ b/src/h5/dd-resizable.ts @@ -1,4 +1,4 @@ -// dd-resizable.ts 3.1.5 @preserve +// dd-resizable.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/dd-utils.ts b/src/h5/dd-utils.ts index 6c43fb6be..2a649eeb0 100644 --- a/src/h5/dd-utils.ts +++ b/src/h5/dd-utils.ts @@ -1,4 +1,4 @@ -// dd-utils.ts 3.1.5 @preserve +// dd-utils.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/h5/gridstack-dd-native.ts b/src/h5/gridstack-dd-native.ts index 2d453434c..64dc925c5 100644 --- a/src/h5/gridstack-dd-native.ts +++ b/src/h5/gridstack-dd-native.ts @@ -1,4 +1,4 @@ -// gridstack-dd-native.ts 3.1.5 @preserve +// gridstack-dd-native.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/index-h5.ts b/src/index-h5.ts index 99a97b826..aad09dc67 100644 --- a/src/index-h5.ts +++ b/src/index-h5.ts @@ -1,4 +1,4 @@ -// index.html5.ts 3.1.5 - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve +// index.html5.ts 3.1.5-dev - everything you need for a Grid that uses HTML5 native drag&drop (work in progress) @preserve // import './gridstack-poly.js'; diff --git a/src/index-jq.ts b/src/index-jq.ts index b0ea31206..6633eb3cc 100644 --- a/src/index-jq.ts +++ b/src/index-jq.ts @@ -1,4 +1,4 @@ -// index.jq.ts 3.1.5 - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve +// index.jq.ts 3.1.5-dev - everything you need for a Grid that uses Jquery-ui drag&drop (original, full feature) @preserve // import './gridstack-poly.js'; diff --git a/src/index-static.ts b/src/index-static.ts index c543e3e88..c18f5417a 100644 --- a/src/index-static.ts +++ b/src/index-static.ts @@ -1,4 +1,4 @@ -// index.static.ts 3.1.5 - everything you need for a static Grid (non draggable) @preserve +// index.static.ts 3.1.5-dev - everything you need for a static Grid (non draggable) @preserve // import './gridstack-poly.js'; diff --git a/src/types.ts b/src/types.ts index a7a67d4c8..61c7d46ff 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -// types.ts 3.1.5 @preserve +// types.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ diff --git a/src/utils.ts b/src/utils.ts index e5f63b6b5..0a9f6b29c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -// utils.ts 3.1.5 @preserve +// utils.ts 3.1.5-dev @preserve /** * https://gridstackjs.com/ From 682e58524f832281767c262031bc05195ee31e54 Mon Sep 17 00:00:00 2001 From: Alain Dumesny Date: Sun, 24 Jan 2021 09:32:11 -0800 Subject: [PATCH 0394/1298] https://jqueryui.com/download/ version * getting jquery-ui from website again now that it is working * no code change per say (indent and comments) but also no longer need to comment out > AMD. Register as an anonymous module. * updated two-jq.html to show actual $ usage for testing --- demo/two-jq.html | 32 +- doc/CHANGES.md | 1 + src/jq/jquery-ui.js | 7422 +++++++++++++++++++++---------------------- 3 files changed, 3727 insertions(+), 3728 deletions(-) diff --git a/demo/two-jq.html b/demo/two-jq.html index 5c82e5718..986e708c0 100644 --- a/demo/two-jq.html +++ b/demo/two-jq.html @@ -4,7 +4,7 @@ - Two grids demo + Two grids JQ demo @@ -45,21 +45,19 @@
    -

    Two grids demo

    +

    Two grids demo (Jquery version)

    @@ -83,19 +81,21 @@

    Two grids demo

    diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 6273a2e94..ed51631ef 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -5,6 +5,7 @@ Change log **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* +- [3.1.5-dev](#315-dev) - [3.1.5 (2021-1-23)](#315-2021-1-23) - [3.1.4 (2021-1-11)](#314-2021-1-11) - [3.1.3 (2021-1-2)](#313-2021-1-2) diff --git a/src/jq/jquery-ui.js b/src/jq/jquery-ui.js index 14d4a9d9b..89630ee83 100644 --- a/src/jq/jquery-ui.js +++ b/src/jq/jquery-ui.js @@ -1,20 +1,18 @@ -/*! jQuery UI - v1.12.1 - 2019-11-20 +/*! jQuery UI - v1.12.1 - 2021-01-24 * http://jqueryui.com * Includes: widget.js, data.js, disable-selection.js, scroll-parent.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/mouse.js -* Copyright jQuery Foundation and other contributors; Licensed MIT -*/ +* Copyright jQuery Foundation and other contributors; Licensed MIT */ (function( factory ) { - /* [alain] we compile this in so no need to load with AMD - if ( typeof define === "function" && define.amd ) { + if ( typeof define === "function" && define.amd ) { - // AMD. Register as an anonymous module. - define([ "jquery" ], factory ); - } else */ { + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { - // Browser globals - factory( jQuery ); - } + // Browser globals + factory( jQuery ); + } }(function( $ ) { $.ui = $.ui || {}; @@ -22,7 +20,7 @@ $.ui = $.ui || {}; var version = $.ui.version = "1.12.1"; -/* +/*! * jQuery UI Widget 1.12.1 * http://jqueryui.com * @@ -43,709 +41,709 @@ var widgetUuid = 0; var widgetSlice = Array.prototype.slice; $.cleanData = ( function( orig ) { - return function( elems ) { - var events, elem, i; - for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { - try { - - // Only trigger remove when necessary to save time - events = $._data( elem, "events" ); - if ( events && events.remove ) { - $( elem ).triggerHandler( "remove" ); - } - - // Http://bugs.jquery.com/ticket/8235 - } catch ( e ) {} - } - orig( elems ); - }; + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; } )( $.cleanData ); $.widget = function( name, base, prototype ) { - var existingConstructor, constructor, basePrototype; - - // ProxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - var proxiedPrototype = {}; - - var namespace = name.split( "." )[ 0 ]; - name = name.split( "." )[ 1 ]; - var fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - if ( $.isArray( prototype ) ) { - prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); - } - - // 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() { - function _super() { - return base.prototype[ prop ].apply( this, arguments ); - } - - function _superApply( args ) { - return base.prototype[ prop ].apply( this, args ); - } - - return function() { - var __super = this._super; - var __superApply = this._superApply; - var 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 ); - - return constructor; + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( $.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // 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() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var 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 ); + + return constructor; }; $.widget.extend = function( target ) { - var input = widgetSlice.call( arguments, 1 ); - var inputIndex = 0; - var inputLength = input.length; - var key; - var 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; + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var 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"; - var args = widgetSlice.call( arguments, 1 ); - var returnValue = this; - - if ( isMethodCall ) { - - // If this is an empty collection, we need to have the instance method - // return undefined instead of the jQuery instance - if ( !this.length && options === "instance" ) { - returnValue = undefined; - } else { - this.each( function() { - var methodValue; - var instance = $.data( this, fullName ); - - if ( options === "instance" ) { - returnValue = instance; - return false; - } - - 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 { - - // Allow multiple hashes to be passed on init - if ( args.length ) { - options = $.widget.extend.apply( null, [ options ].concat( args ) ); - } - - this.each( function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} ); - if ( instance._init ) { - instance._init(); - } - } else { - $.data( this, fullName, new object( options, this ) ); - } - } ); - } - - return returnValue; - }; + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + 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 { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; }; $.Widget = function( /* options, element */ ) {}; $.Widget._childConstructors = []; $.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
    ", - - options: { - classes: {}, - disabled: false, - - // Callbacks - create: null - }, - - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = widgetUuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - this.classesElementLookup = {}; - - 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.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this._create(); - - if ( this.options.disabled ) { - this._setOptionDisabled( this.options.disabled ); - } - - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - - _getCreateOptions: function() { - return {}; - }, - - _getCreateEventData: $.noop, - - _create: $.noop, - - _init: $.noop, - - destroy: function() { - var that = this; - - this._destroy(); - $.each( this.classesElementLookup, function( key, value ) { - that._removeClass( value, key ); - } ); - - // We can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .off( this.eventNamespace ) - .removeData( this.widgetFullName ); - this.widget() - .off( this.eventNamespace ) - .removeAttr( "aria-disabled" ); - - // Clean up events and states - this.bindings.off( this.eventNamespace ); - }, - - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key; - var parts; - var curOption; - var 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 ) { - if ( key === "classes" ) { - this._setOptionClasses( value ); - } - - this.options[ key ] = value; - - if ( key === "disabled" ) { - this._setOptionDisabled( value ); - } - - return this; - }, - - _setOptionClasses: function( value ) { - var classKey, elements, currentElements; - - for ( classKey in value ) { - currentElements = this.classesElementLookup[ classKey ]; - if ( value[ classKey ] === this.options.classes[ classKey ] || - !currentElements || - !currentElements.length ) { - continue; - } - - // We are doing this to create a new jQuery object because the _removeClass() call - // on the next line is going to destroy the reference to the current elements being - // tracked. We need to save a copy of this collection so that we can add the new classes - // below. - elements = $( currentElements.get() ); - this._removeClass( currentElements, classKey ); - - // We don't use _addClass() here, because that uses this.options.classes - // for generating the string of classes. We want to use the value passed in from - // _setOption(), this is the new value of the classes option which was passed to - // _setOption(). We pass this value directly to _classes(). - elements.addClass( this._classes( { - element: elements, - keys: classKey, - classes: value, - add: true - } ) ); - } - }, - - _setOptionDisabled: function( value ) { - this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); - - // If the widget is becoming disabled, then nothing is interactive - if ( value ) { - this._removeClass( this.hoverable, null, "ui-state-hover" ); - this._removeClass( this.focusable, null, "ui-state-focus" ); - } - }, - - enable: function() { - return this._setOptions( { disabled: false } ); - }, - - disable: function() { - return this._setOptions( { disabled: true } ); - }, - - _classes: function( options ) { - var full = []; - var that = this; - - options = $.extend( { - element: this.element, - classes: this.options.classes || {} - }, options ); - - function processClassString( classes, checkOption ) { - var current, i; - for ( i = 0; i < classes.length; i++ ) { - current = that.classesElementLookup[ classes[ i ] ] || $(); - if ( options.add ) { - current = $( $.unique( current.get().concat( options.element.get() ) ) ); - } else { - current = $( current.not( options.element ).get() ); - } - that.classesElementLookup[ classes[ i ] ] = current; - full.push( classes[ i ] ); - if ( checkOption && options.classes[ classes[ i ] ] ) { - full.push( options.classes[ classes[ i ] ] ); - } - } - } - - this._on( options.element, { - "remove": "_untrackClassesElement" - } ); - - if ( options.keys ) { - processClassString( options.keys.match( /\S+/g ) || [], true ); - } - if ( options.extra ) { - processClassString( options.extra.match( /\S+/g ) || [] ); - } - - return full.join( " " ); - }, - - _untrackClassesElement: function( event ) { - var that = this; - $.each( that.classesElementLookup, function( key, value ) { - if ( $.inArray( event.target, value ) !== -1 ) { - that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); - } - } ); - }, - - _removeClass: function( element, keys, extra ) { - return this._toggleClass( element, keys, extra, false ); - }, - - _addClass: function( element, keys, extra ) { - return this._toggleClass( element, keys, extra, true ); - }, - - _toggleClass: function( element, keys, extra, add ) { - add = ( typeof add === "boolean" ) ? add : extra; - var shift = ( typeof element === "string" || element === null ), - options = { - extra: shift ? keys : extra, - keys: shift ? element : keys, - element: shift ? this.element : element, - add: add - }; - options.element.toggleClass( this._classes( options ), add ); - return this; - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement; - var 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 { - 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*(.*)$/ ); - var eventName = match[ 1 ] + instance.eventNamespace; - var selector = match[ 2 ]; - - if ( selector ) { - delegateElement.on( eventName, selector, handlerProxy ); - } else { - element.on( eventName, handlerProxy ); - } - } ); - }, - - _off: function( element, eventName ) { - eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + - this.eventNamespace; - element.off( eventName ).off( eventName ); - - // Clear the stack to avoid memory leaks (#10056) - this.bindings = $( this.bindings.not( element ).get() ); - this.focusable = $( this.focusable.not( element ).get() ); - this.hoverable = $( this.hoverable.not( element ).get() ); - }, - - _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 ) { - this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); - }, - mouseleave: function( event ) { - this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); - } - } ); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); - }, - focusout: function( event ) { - this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); - } - } ); - }, - - _trigger: function( type, event, data ) { - var prop, orig; - var 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() ); - } + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
    ", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + 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.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var 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 ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.unique( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var 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 { + 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*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _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 ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var 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; - var 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(); - } ); - } - }; + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var 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(); + } ); + } + }; } ); var widget = $.widget; -/* +/*! * jQuery UI :data 1.12.1 * http://jqueryui.com * @@ -761,20 +759,20 @@ var widget = $.widget; var data = $.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 ] ); - } + 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 ] ); + } } ); -/* +/*! * jQuery UI Disable Selection 1.12.1 * http://jqueryui.com * @@ -792,25 +790,25 @@ var data = $.extend( $.expr[ ":" ], { var disableSelection = $.fn.extend( { - disableSelection: ( function() { - var eventType = "onselectstart" in document.createElement( "div" ) ? - "selectstart" : - "mousedown"; - - return function() { - return this.on( eventType + ".ui-disableSelection", function( event ) { - event.preventDefault(); - } ); - }; - } )(), - - enableSelection: function() { - return this.off( ".ui-disableSelection" ); - } + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), + + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } } ); -/* +/*! * jQuery UI Scroll Parent 1.12.1 * http://jqueryui.com * @@ -827,21 +825,21 @@ var disableSelection = $.fn.extend( { var scrollParent = $.fn.scrollParent = function( includeHidden ) { - var position = this.css( "position" ), - excludeStaticParent = position === "absolute", - overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, - scrollParent = this.parents().filter( function() { - var parent = $( this ); - if ( excludeStaticParent && parent.css( "position" ) === "static" ) { - return false; - } - return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + - parent.css( "overflow-x" ) ); - } ).eq( 0 ); - - return position === "fixed" || !scrollParent.length ? - $( this[ 0 ].ownerDocument || document ) : - scrollParent; + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; }; @@ -850,7 +848,7 @@ var scrollParent = $.fn.scrollParent = function( includeHidden ) { // This file is deprecated var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); -/* +/*! * jQuery UI Mouse 1.12.1 * http://jqueryui.com * @@ -868,196 +866,196 @@ var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); var mouseHandled = false; $( document ).on( "mouseup", function() { - mouseHandled = false; + mouseHandled = false; } ); var widgetsMouse = $.widget( "ui.mouse", { - version: "1.12.1", - options: { - cancel: "input, textarea, button, select, option", - distance: 1, - delay: 0 - }, - _mouseInit: function() { - var that = this; - - this.element - .on( "mousedown." + this.widgetName, function( event ) { - return that._mouseDown( event ); - } ) - .on( "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.off( "." + this.widgetName ); - if ( this._mouseMoveDelegate ) { - this.document - .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); - } - }, - - _mouseDown: function( event ) { - - // don't let more than one widget handle mouseStart - if ( mouseHandled ) { - return; - } - - this._mouseMoved = false; - - // 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 ); - }; - - this.document - .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); - - event.preventDefault(); - - mouseHandled = true; - return true; - }, - - _mouseMove: function( event ) { - - // Only check for mouseups outside the document if you've moved inside the document - // at least once. This prevents the firing of mouseup in the case of IE<9, which will - // fire a mousemove event if content is placed under the cursor. See #7778 - // Support: IE <9 - if ( this._mouseMoved ) { - - // 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 ); - - // Iframe mouseup check - mouseup occurred in another document - } else if ( !event.which ) { - - // Support: Safari <=8 - 9 - // Safari sets which to 0 if you press any of the following keys - // during a drag (#14461) - if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || - event.originalEvent.metaKey || event.originalEvent.shiftKey ) { - this.ignoreMissingWhich = true; - } else if ( !this.ignoreMissingWhich ) { - return this._mouseUp( event ); - } - } - } - - if ( event.which || event.button ) { - this._mouseMoved = true; - } - - 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 ) { - this.document - .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) - .off( "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 ); - } - - if ( this._mouseDelayTimer ) { - clearTimeout( this._mouseDelayTimer ); - delete this._mouseDelayTimer; - } - - this.ignoreMissingWhich = false; - mouseHandled = false; - event.preventDefault(); - }, - - _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; } + version: "1.12.1", + options: { + cancel: "input, textarea, button, select, option", + distance: 1, + delay: 0 + }, + _mouseInit: function() { + var that = this; + + this.element + .on( "mousedown." + this.widgetName, function( event ) { + return that._mouseDown( event ); + } ) + .on( "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.off( "." + this.widgetName ); + if ( this._mouseMoveDelegate ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "mouseup." + this.widgetName, this._mouseUpDelegate ); + } + }, + + _mouseDown: function( event ) { + + // don't let more than one widget handle mouseStart + if ( mouseHandled ) { + return; + } + + this._mouseMoved = false; + + // 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 ); + }; + + this.document + .on( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .on( "mouseup." + this.widgetName, this._mouseUpDelegate ); + + event.preventDefault(); + + mouseHandled = true; + return true; + }, + + _mouseMove: function( event ) { + + // Only check for mouseups outside the document if you've moved inside the document + // at least once. This prevents the firing of mouseup in the case of IE<9, which will + // fire a mousemove event if content is placed under the cursor. See #7778 + // Support: IE <9 + if ( this._mouseMoved ) { + + // 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 ); + + // Iframe mouseup check - mouseup occurred in another document + } else if ( !event.which ) { + + // Support: Safari <=8 - 9 + // Safari sets which to 0 if you press any of the following keys + // during a drag (#14461) + if ( event.originalEvent.altKey || event.originalEvent.ctrlKey || + event.originalEvent.metaKey || event.originalEvent.shiftKey ) { + this.ignoreMissingWhich = true; + } else if ( !this.ignoreMissingWhich ) { + return this._mouseUp( event ); + } + } + } + + if ( event.which || event.button ) { + this._mouseMoved = true; + } + + 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 ) { + this.document + .off( "mousemove." + this.widgetName, this._mouseMoveDelegate ) + .off( "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 ); + } + + if ( this._mouseDelayTimer ) { + clearTimeout( this._mouseDelayTimer ); + delete this._mouseDelayTimer; + } + + this.ignoreMissingWhich = false; + mouseHandled = false; + event.preventDefault(); + }, + + _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; } } ); @@ -1065,78 +1063,78 @@ var widgetsMouse = $.widget( "ui.mouse", { // $.ui.plugin is deprecated. Use $.widget() extensions instead. var plugin = $.ui.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, allowDisconnected ) { - var i, - set = instance.plugins[ name ]; - - if ( !set ) { - return; - } - - if ( !allowDisconnected && ( !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 ); - } - } - } + 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, allowDisconnected ) { + var i, + set = instance.plugins[ name ]; + + if ( !set ) { + return; + } + + if ( !allowDisconnected && ( !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 ); + } + } + } }; var safeActiveElement = $.ui.safeActiveElement = function( document ) { - var activeElement; - - // Support: IE 9 only - // IE9 throws an "Unspecified error" accessing document.activeElement from an