config redirect

This commit is contained in:
Nuno Coração
2023-01-29 22:30:24 +00:00
parent 17557c7d73
commit 5fb4bd8083
9905 changed files with 1258996 additions and 36355 deletions

11
node_modules/packery/test/.jshintrc generated vendored Normal file
View File

@@ -0,0 +1,11 @@
{
"browser": true,
"undef": true,
"unused": true,
"globals": {
"appendRandomSizedItems": true,
"gimmeAnItemElement": true,
"Packery": false,
"QUnit": false
}
}

35
node_modules/packery/test/helpers.js generated vendored Normal file
View File

@@ -0,0 +1,35 @@
( function( window ) {
'use strict';
window.appendRandomSizedItems = function( container ) {
var frag = document.createDocumentFragment();
var item;
for ( var i=0; i < 9; i++ ) {
item = document.createElement('div');
item.className = 'item';
var w = Math.floor( Math.random() * Math.random() * 70 ) + 10;
var h = Math.floor( Math.random() * Math.random() * 70 ) + 10;
item.style.width = w + 'px';
item.style.height = h + 'px';
frag.appendChild( item );
}
// last one isn't random, but is needed for checking
// bigger than colum width and stuff
item = document.createElement('div');
item.className = 'item';
item.style.width = '72px';
item.style.height = '25px';
frag.appendChild( item );
container.appendChild( frag );
};
window.gimmeAnItemElement = function() {
var elem = document.createElement('div');
elem.className = 'item';
return elem;
};
})( window );

321
node_modules/packery/test/index.html generated vendored Normal file
View File

@@ -0,0 +1,321 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Packery tests</title>
<link rel="stylesheet" href="../bower_components/qunit/qunit/qunit.css" />
<link rel="stylesheet" href="test.css" />
<script src="../bower_components/qunit/qunit/qunit.js"></script>
</head>
<body>
<h1>Packery tests</h1>
<div id="qunit"></div>
<div id="empty" class="container"></div>
<div id="default">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item h2"></div>
</div>
<div id="filtered" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="foobar"></div>
</div>
<div id="found" class="container">
<div><div class="item w2"></div></div>
<div><div class="item h2"></div></div>
<div><div class="item w2"></div></div>
<div><div class="item"></div></div>
</div>
<div id="filter-found" class="container">
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="foobar"></div>
<div><div class="item w2"></div></div>
<div><div class="item"></div></div>
</div>
<div id="layout" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<h2>Layout extra big</h2>
<div id="layout-extra-big" class="container">
<div class="item w5"></div>
<div class="item w2"></div>
<div class="item w5"></div>
<div class="item w2"></div>
<div class="item w2"></div>
</div>
<h2>Consecutive</h2>
<div id="consecutive" class="container">
<div class="item i0"></div>
<div class="item i1"></div>
<div class="item i2"></div>
<div class="item i3"></div>
</div>
<div id="gridded1" class="container gridded">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
</div>
<div id="gridded2" class="container gridded">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
</div>
<div id="container-size" class="container">
<div class="item"></div>
<div class="item h2"></div>
</div>
<div id="add-remove" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item"></div>
</div>
<div id="stamped1" class="container has-stamps place-stamps">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp1"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp2"></div>
<div class="item"></div>
</div>
<div id="stamped2" class="container has-stamps">
<div class="item stamp stamp1"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item stamp stamp2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<div id="stamped3" class="container has-stamps place-stamps">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp1"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp2"></div>
<div class="item"></div>
</div>
<div id="stamped4" class="container has-stamps place-stamps">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp1"></div>
<div class="item"></div>
<div class="item"></div>
<div class="stamp stamp2"></div>
<div class="item"></div>
</div>
<h2>Placed borders</h2>
<div id="stamped-borders" class="container has-stamps">
<div class="stamp stamp1"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<h2>Adding</h2>
<div id="adding" class="container">
<div class="item"></div>
<div class="item"></div>
</div>
<h2>Prepend</h2>
<div id="prepend" class="container">
<div class="item"></div>
<div class="item"></div>
</div>
<h2>Draggable</h2>
<div id="draggable" class="container">
<div class="item i0"></div>
<div class="item i1"></div>
<div class="item i2"></div>
<div class="item i3 dragger"></div>
<div class="item i4"></div>
<div class="item i5"></div>
<div class="item i6"></div>
<div class="item i7"></div>
</div>
<h2>Fitting</h2>
<div id="fitting" class="container">
<div class="item i0"></div>
<div class="item i1"></div>
<div class="item i2"></div>
<div class="item i3"></div>
<div class="item i4"></div>
<div class="item i5"></div>
<div class="item i6"></div>
<div class="item i7"></div>
</div>
<h2>Declarative</h2>
<div id="declarative" class="container js-packery">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<!-- wrong quote marks for JSON -->
<div id="declarative-bad-json" class="container js-packery" data-packery-options="{ 'columnWidth': 30 }">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<div id="declarative-good-json" class="container js-packery" data-packery-options='{ "columnWidth": 25, "rowHeight": 30, "transitionDuration": "1.2s", "isResizable": false }'>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<h2>jQuery</h2>
<div id="jquery" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item h2"></div>
</div>
<h2>isInitLayout option</h2>
<div id="is-init-layout" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item h2"></div>
</div>
<!-- <h2>isLayoutInstant option</h2>
<div id="is-layout-instant" class="container">
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item w2"></div>
<div class="item h2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item h2"></div>
</div> -->
<div id="hidden-items" class="container">
<div class="item w2 h2 hidden"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<h2>Sub-pixel fit</h2>
<div id="sub-pixel-fit" class="container">
<div class="grid-sizer"></div>
<div class="item"></div>
<div class="item w2"></div>
<div class="item w2"></div>
</div>
<script src="../bower_components/get-size/get-size.js"></script>
<script src="../bower_components/desandro-matches-selector/matches-selector.js"></script>
<script src="../bower_components/ev-emitter/ev-emitter.js"></script>
<script src="../bower_components/jquery/dist/jquery.min.js"></script>
<script src="../bower_components/jquery-bridget/jquery-bridget.js"></script>
<script src="../bower_components/fizzy-ui-utils/utils.js"></script>
<script src="../bower_components/outlayer/item.js"></script>
<script src="../bower_components/outlayer/outlayer.js"></script>
<script src="../js/rect.js"></script>
<script src="../js/packer.js"></script>
<script src="../js/item.js"></script>
<script src="../js/packery.js"></script>
<script src="helpers.js"></script>
<script src="unit/test-rect.js"></script>
<script src="unit/test-packer.js"></script>
<script src="unit/basics.js"></script>
<script src="unit/defaults-empty.js"></script>
<script src="unit/get-items.js"></script>
<script src="unit/layout.js"></script>
<script src="unit/layout-extra-big.js"></script>
<script src="unit/consecutive.js"></script>
<script src="unit/grid.js"></script>
<script src="unit/container-size.js"></script>
<script src="unit/remove.js"></script>
<script src="unit/stamped.js"></script>
<script src="unit/add-items.js"></script>
<script src="unit/prepend.js"></script>
<script src="unit/draggable.js"></script>
<script src="unit/fit.js"></script>
<script src="unit/jquery-plugin.js"></script>
<script src="unit/declarative.js"></script>
<script src="unit/is-init-layout.js"></script>
<script src="unit/hidden-items.js"></script>
<script src="unit/sub-pixel-fit.js"></script>
</body>
</html>

113
node_modules/packery/test/test.css generated vendored Normal file
View File

@@ -0,0 +1,113 @@
body {
font-family: sans-serif;
}
.container {
width: 80px;
margin-bottom: 20px;
background: #EEE;
}
.container:after {
content: '';
display: table;
}
.item {
float: left;
width: 18px;
height: 18px;
margin: 1px;
background: #444;
}
.item.w2 { width: 38px; }
.item.h2 { height: 38px; }
.item.w4 { width: 78px; }
.item.h4 { height: 78px; }
.item.w5 { width: 98px; }
.gridded .grid-sizer {
width: 30px;
height: 25px;
}
.gridded .gutter-sizer {
width: 10px;
}
.stamp {
background: red;
}
.has-stamps {
position: relative;
}
.place-stamps .stamp {
position: absolute;
}
.place-stamps .stamp1 {
width: 30px;
height: 25px;
left: 22px;
top: 10px;
}
.place-stamps .stamp2 {
width: 10px;
height: 45px;
left: 3px;
top: 30px;
}
#stamped2 .stamp1 {
position: relative;
left: 8px;
top: 8px;
}
#stamped2 .stamp2 {
position: absolute;
right: 8px;
top: 23px;
}
#stamped-borders {
border-left: 10px solid;
border-top: 15px solid;
}
#stamped-borders .stamp1 {
width: 50px;
height: 30px;
}
.dragger {
background: green;
}
/*#fitting {
position: absolute;
top: 0;
}*/
#hidden-items .hidden {
display: none;
}
#sub-pixel-fit {
width: 290px;
}
#sub-pixel-fit .item,
#sub-pixel-fit .grid-sizer {
width: 20%;
}
#sub-pixel-fit .item {
margin: 0;
}
#sub-pixel-fit .item.w2 { width: 40%; }

34
node_modules/packery/test/unit/add-items.js generated vendored Normal file
View File

@@ -0,0 +1,34 @@
QUnit.test( 'addItems', function( assert ) {
var container = document.querySelector('#adding');
var pckry = new Packery( container, {
itemSelector: '.item'
});
var elem = gimmeAnItemElement();
var items = pckry.addItems( elem );
assert.equal( items.length, 1, 'method return array of 1' );
assert.equal( pckry.items[2].element, elem, 'item was added, element matches' );
assert.equal( items[0] instanceof Packery.Item, true, 'item is instance of Packery.Item' );
assert.equal( pckry.items.length, 3, 'item added to items' );
// try it with an array
var elems = [ gimmeAnItemElement(), gimmeAnItemElement(), document.createElement('div') ];
items = pckry.addItems( elems );
assert.equal( items.length, 2, 'method return array of 2' );
assert.equal( pckry.items[3].element, elems[0], 'item was added, element matches' );
assert.equal( pckry.items.length, 5, 'two items added to items' );
// try it with HTMLCollection / NodeList
var fragment = document.createDocumentFragment();
fragment.appendChild( gimmeAnItemElement() );
fragment.appendChild( document.createElement('div') );
fragment.appendChild( gimmeAnItemElement() );
var divs = fragment.querySelectorAll('div');
items = pckry.addItems( divs );
assert.equal( items.length, 2, 'method return array of 2' );
assert.equal( pckry.items[5].element, divs[0], 'item was added, element matches' );
assert.equal( pckry.items.length, 7, 'two items added to items' );
});

14
node_modules/packery/test/unit/basics.js generated vendored Normal file
View File

@@ -0,0 +1,14 @@
QUnit.module('Packery');
QUnit.test( 'basics', function( assert ) {
assert.equal( typeof Packery, 'function', 'Packery is a function' );
// TODO pckry should be null or something
var pckry1 = new Packery();
// console.log( pckry, typeof pckry );
assert.ok( !pckry1._isLayoutInited, 'packery not inited on undefined' );
// var pckry2 = new Packery({});
// console.log( pckry, typeof pckry );
// FIXME Outlayer should throw error up top
// assert.ok( !pckry2._isLayoutInited, 'packery not inited on object' );
});

36
node_modules/packery/test/unit/consecutive.js generated vendored Normal file
View File

@@ -0,0 +1,36 @@
QUnit.test( 'consecutive', function( assert ) {
var container = document.querySelector('#consecutive');
var pckry = new Packery( container );
var i0 = container.querySelector('.i0');
var i1 = container.querySelector('.i1');
var i3 = container.querySelector('.i3');
i1.style.width = '28px';
i1.style.height = '28px';
i1.style.background = 'blue';
var done = assert.async();
pckry.once( 'layoutComplete', function() {
assert.ok( true, 'layoutComplete triggered' );
assert.equal( i3.style.left, '0px', 'i3.style.left' );
assert.equal( i3.style.top, '20px', 'i3.style.top' );
setTimeout( fit1 );
});
pckry.layout();
function fit1() {
pckry.once( 'layoutComplete', function() {
assert.equal( i3.style.left, '60px', 'i3.style.left' );
assert.equal( i3.style.top, '30px', 'i3.style.top' );
// all done
done();
});
i0.style.width = '38px';
i0.style.height = '38px';
i0.style.background = 'orange';
pckry.layout();
}
});

24
node_modules/packery/test/unit/container-size.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
QUnit.test( 'container size', function( assert ) {
var container = document.querySelector('#container-size');
var pckry = new Packery( container );
assert.equal( container.style.height, '40px', 'default height' );
pckry.options.gutter = 4;
pckry._getMeasurements();
pckry.layout();
assert.equal( container.style.height, '40px', 'added gutter, height same' );
// addPaddingBorders() {
container.style.padding = '1px 2px 3px 4px';
container.style.borderStyle = 'solid';
container.style.borderWidth = '1px 2px 3px 4px';
pckry.layout();
assert.equal( container.style.height, '40px', 'add padding, height same' );
// border box
container.style.WebkitBoxSizing = 'border-box';
container.style.MozBoxSizing = 'border-box';
container.style.boxSizing = 'border-box';
pckry.layout();
assert.equal( container.style.height, '48px', 'border-box, height + padding + border' );
});

29
node_modules/packery/test/unit/declarative.js generated vendored Normal file
View File

@@ -0,0 +1,29 @@
QUnit.test( 'declarative', function( assert ) {
var $ = window.jQuery;
// no data-packery-options
var container1 = document.querySelector('#declarative');
var pckry1 = Packery.data( container1 );
assert.ok( pckry1 instanceof Packery, 'Packery instance retrieved from element' );
assert.deepEqual( pckry1.options, Packery.defaults, 'options match defaults' );
assert.ok( pckry1._isLayoutInited, 'Packer was initialized' );
// has data-packery-options, but bad JSON
var container2 = document.querySelector('#declarative-bad-json');
var pckry2 = Packery.data( container2 );
assert.ok( !pckry2, 'bad JSON in data-packery-options does not init Packery' );
assert.ok( !container2.packeryGUID, 'no expando property on element' );
// has good data-packery-options
var container3 = document.querySelector('#declarative-good-json');
var pckry3 = Packery.data( container3 );
assert.ok( pckry3 instanceof Packery, 'Packery instance retrieved from element, with good JSON in data-packery-options' );
assert.strictEqual( pckry3.options.columnWidth, 25, 'columnWidth option was set' );
assert.strictEqual( pckry3.options.rowHeight, 30, 'rowHeight option was set' );
assert.strictEqual( pckry3.options.transitionDuration, '1.2s', 'transitionDuration option was set' );
assert.strictEqual( pckry3.options.isResizable, false, 'isResizable option was set' );
assert.equal( $.data( container3, 'packery' ), pckry3, '$.data( elem, "packery") returns Packery instance' );
});

21
node_modules/packery/test/unit/defaults-empty.js generated vendored Normal file
View File

@@ -0,0 +1,21 @@
QUnit.test( 'defaults / empty', function( assert ) {
var empty = document.querySelector('#empty');
var pckry = new Packery( empty );
var done = assert.async();
assert.deepEqual( pckry.options, Packery.defaults, 'default options match prototype' );
assert.equal( pckry.items.length, 0, 'zero items' );
assert.equal( pckry.stamps.length, 0, 'zero stamped elements' );
assert.equal( Packery.data( empty ), pckry, 'data method returns instance' );
assert.ok( pckry.isResizeBound, 'isResizeBound' );
pckry.once( 'layoutComplete', function( items ) {
assert.ok( true, 'layoutComplete triggered with no items' );
assert.equal( items.length, 0, 'no items' );
done();
});
// add gutter, to check that container size doesn't get negative number
pckry.options.gutter = 20;
pckry.layout();
});

84
node_modules/packery/test/unit/draggable.js generated vendored Normal file
View File

@@ -0,0 +1,84 @@
QUnit.test( 'draggable', function( assert ) {
var container = document.querySelector('#draggable');
var itemElems = container.querySelectorAll('.item');
var dragElem = container.querySelector('.dragger');
var pckry = new Packery( container, {
transitionDuration: '0.2s'
});
var done = assert.async();
function simulateDrag( x, y ) {
pckry.itemDragStart( dragElem );
pckry.itemDragMove( dragElem, x, y );
pckry.itemDragEnd( dragElem );
}
function checkItemPosition( itemElem, x, y, message ) {
var actual = itemElem.style.left + ' ' + itemElem.style.top;
var expected = x + 'px ' + y + 'px';
message = message || 'item position';
assert.equal( actual, expected, message );
}
// simulate drag to middle
pckry.once( 'dragItemPositioned', function() {
assert.ok( true, 'dragItemPositioned did trigger, 4th item moved to 35, 15' );
checkItemPosition( itemElems[0], 0, 0, '1st item' );
checkItemPosition( itemElems[1], 20, 0, '2nd item' );
checkItemPosition( itemElems[2], 40, 0, '3rd item' );
checkItemPosition( itemElems[6], 40, 40, '7th item, moved down below dragged item' );
checkItemPosition( itemElems[7], 60, 0, '8th item, moved up' );
checkItemPosition( dragElem, 40, 20, 'drag item, 2nd row, 3rd column' );
assert.equal( pckry.items[6].element, dragElem, 'dragged elem in now 7th in items' );
// HACK setTimeout because of Packery bug
setTimeout( dragOutside );
});
simulateDrag( 35, 15 );
function dragOutside() {
pckry.once( 'dragItemPositioned', function() {
assert.ok( true, 'dragItemPositioned event did trigger' );
checkItemPosition( dragElem, 60, 0, 'drag item, 1st row, 4th column' );
checkItemPosition( itemElems[4], 0, 20, '5th item, did not move' );
checkItemPosition( itemElems[6], 40, 20, '7th item, moved back up' );
checkItemPosition( itemElems[7], 60, 20, '8th item, moved back down' );
assert.equal( pckry.items[3].element, dragElem, 'dragged elem in now 4th in items' );
setTimeout( dragWithGrid );
});
simulateDrag( 300, -60 );
}
function dragWithGrid() {
pckry.options.columnWidth = 25;
pckry.options.rowHeight = 25;
// disable transition, layout, re-enable transition
pckry.options.transitionDuration = 0;
pckry.layout();
pckry.options.transitionDuration = '0.2s';
pckry.once( 'dragItemPositioned', function() {
checkItemPosition( dragElem, 25, 25, 'drag item, 2nd row, 2nd column' );
checkItemPosition( itemElems[4], 25, 50, '5th item, 3rd row, 2nd column, moved down' );
checkItemPosition( itemElems[5], 50, 25, '6th item, 2nd row, 3rd column, did not move' );
checkItemPosition( itemElems[6], 0, 25, '7th item, 2nd row, 1st column, moved up' );
checkItemPosition( itemElems[7], 25, 75, '7th item, 4th row, 2nd column, moved down' );
setTimeout( dragOutsideWithGrid );
});
simulateDrag( 35, 35 );
}
function dragOutsideWithGrid() {
pckry.once( 'dragItemPositioned', function() {
checkItemPosition( dragElem, 50, 0, 'dragged, top right corner in grid' );
done();
});
simulateDrag( 300, -30 );
}
});

164
node_modules/packery/test/unit/fit.js generated vendored Normal file
View File

@@ -0,0 +1,164 @@
QUnit.test( '.fit()', function( assert ) {
var container = document.querySelector('#fitting');
var pckry = new Packery( container, {
transitionDuration: '0.2s'
});
var done = assert.async();
var elem1 = container.querySelector('.i1');
var elem2 = container.querySelector('.i2');
var elem3 = container.querySelector('.i3');
var elem5 = container.querySelector('.i5');
var elem6 = container.querySelector('.i6');
var item3 = pckry.getItem( elem3 );
function checkItemPosition( itemElem, x, y, message ) {
var actual = itemElem.style.left + ' ' + itemElem.style.top;
var expected = x + 'px ' + y + 'px';
message = message || 'item position';
assert.equal( actual, expected, message );
}
// expand item3
elem3.style.width = '48px';
elem3.style.height = '28px';
elem3.style.background = 'blue';
// quickie async
var isFit, isLaidOut;
function resetAsync() {
isFit = false;
isLaidOut = false;
}
// -------------------------- fit -------------------------- //
function ready1() {
if ( !isFit || !isLaidOut ) {
return;
}
checkItemPosition( elem1, 20, 30, 'elem1 shifted down' );
checkItemPosition( elem2, 40, 30, 'elem2 shifted down' );
checkItemPosition( elem5, 20, 50, 'elem5 shifted down, 2nd row' );
resetAsync();
// HACK setTimeout for Packery bug
setTimeout( fit2 );
}
pckry.once( 'fitComplete', function( item ) {
assert.ok( true, 'fitComplete event emitted' );
assert.equal( item, item3, 'item argument returned' );
checkItemPosition( elem3, 20, 0, 'fit elem3 shifted into 2nd spot' );
isFit = true;
ready1();
});
pckry.once( 'layoutComplete', function() {
assert.ok( true, 'layoutComplete event emitted' );
isLaidOut = true;
ready1();
});
// fit it
pckry.fit( elem3 );
// -------------------------- fit into spot -------------------------- //
function ready2() {
if ( !isFit || !isLaidOut ) {
return;
}
resetAsync();
setTimeout( fit3 );
}
function fit2() {
// reset small size
elem3.style.width = '18px';
elem3.style.height = '18px';
pckry.once( 'fitComplete', function() {
assert.ok( true, 'fitComplete event emitted' );
checkItemPosition( elem3, 40, 20, 'fit item in 40, 20' );
isFit = true;
ready2();
});
pckry.once( 'layoutComplete', function() {
assert.ok( true, 'layoutComplete event emitted' );
checkItemPosition( elem3, 40, 20, 'fit item in 40, 20' );
checkItemPosition( elem1, 20, 0, 'elem1 shifted up' );
checkItemPosition( elem2, 40, 0, 'elem2 shifted up' );
checkItemPosition( elem5, 20, 20, 'elem5 shifted up' );
checkItemPosition( elem6, 40, 40, 'elem6 shifted down' );
isLaidOut = true;
ready2();
});
// fit to spot
pckry.fit( elem3, 40, 20 );
}
// -------------------------- fit outside container -------------------------- //
function ready3() {
if ( !isFit || !isLaidOut ) {
return;
}
resetAsync();
setTimeout( fit4 );
}
function fit3() {
pckry.once( 'fitComplete', function() {
checkItemPosition( elem3, 40, 40, 'fit elem in 3rd row, 3rd column' );
isFit = true;
ready3();
});
pckry.once( 'layoutComplete', function() {
isLaidOut = true;
ready3();
});
// try to position item outside container
pckry.fit( elem3, 120, 120 );
}
// -------------------------- columnWidth & rowHeight -------------------------- //
// fit with columnWidth and rowHeight
function fit4() {
pckry.options.columnWidth = 25;
pckry.options.rowHeight = 30;
// disable transition, trigger layout, re-enable transition
pckry.options.transitionDuration = 0;
pckry.layout();
pckry.options.transitionDuration = '0.2s';
function ready4() {
if ( !isFit || !isLaidOut ) {
return;
}
done();
}
pckry.on( 'fitComplete', function() {
assert.ok( true, 'fitComplete event emitted' );
checkItemPosition( elem3, 50, 30, 'fit item, 2nd row, 3rd column' );
isFit = true;
ready4();
});
pckry.on( 'layoutComplete', function() {
checkItemPosition( elem5, 50, 60, 'elem5 shifted down' );
isLaidOut = true;
ready4();
});
pckry.fit( elem3, 55, 28 );
}
});

24
node_modules/packery/test/unit/get-items.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
QUnit.test( 'getItems', function( assert ) {
var defaultElem = document.querySelector('#default');
var defaultPckry = new Packery( defaultElem );
var filtered = document.querySelector('#filtered');
var filteredPckry = new Packery( filtered, {
itemSelector: '.item'
});
var found = document.querySelector('#found');
var foundPckry = new Packery( found, {
itemSelector: '.item'
});
var filterFound = document.querySelector('#filter-found');
var filterFoundPckry = new Packery( filterFound, {
itemSelector: '.item'
});
assert.equal( defaultPckry.items.length, defaultElem.children.length, 'no itemSelector, all children' );
assert.equal( filteredPckry.items.length, 6, 'filtered, itemSelector = .item, not all children' );
assert.equal( foundPckry.items.length, 4, 'found itemSelector = .item, querySelectoring' );
assert.equal( filterFoundPckry.items.length, 5, 'filter found' );
});

81
node_modules/packery/test/unit/grid.js generated vendored Normal file
View File

@@ -0,0 +1,81 @@
QUnit.test( 'layout with columnWidth and rowHeight', function( assert ) {
var container = document.querySelector('#gridded1');
appendRandomSizedItems( container );
var pckry = new Packery( container, {
itemSelector: '.item',
columnWidth: 25,
rowHeight: 30
});
var done = assert.async();
function checkPackeryGrid() {
var colW = pckry.columnWidth + pckry.gutter;
var rowH = pckry.rowHeight + pckry.gutter;
for ( var i=0, len = pckry.items.length; i < len; i++ ) {
var elem = pckry.items[i].element;
var x = parseInt( elem.style.left, 10 );
var y = parseInt( elem.style.top, 10 );
assert.equal( x % colW, 0, 'item ' + i + ' x position is multiple of columnWidth' );
assert.equal( y % rowH, 0, 'item ' + i + ' y position is multiple of rowHeight' );
}
}
assert.equal( pckry.options.columnWidth, 25, 'columnWidth option is set' );
assert.equal( pckry.options.rowHeight, 30, 'rowHeight option is set' );
assert.equal( pckry.columnWidth, 25, 'columnWidth is set' );
assert.equal( pckry.rowHeight, 30, 'rowHeight is set' );
checkPackeryGrid( pckry );
var gridSizer = container.querySelector('.grid-sizer');
pckry.options.columnWidth = gridSizer;
pckry.options.rowHeight = gridSizer;
pckry.once( 'layoutComplete', function() {
checkPackeryGrid( pckry );
setTimeout( setGutter );
});
pckry.layout();
assert.equal( pckry.columnWidth, 30, 'columnWidth is set from element width, in px' );
assert.equal( pckry.rowHeight, 25, 'rowHeight is set from element height, in px' );
function setGutter() {
pckry.options.gutter = container.querySelector('.gutter-sizer');
pckry.once( 'layoutComplete', function() {
checkPackeryGrid( pckry );
setTimeout( setPercentageGrid );
});
pckry.layout();
assert.equal( pckry.gutter, 10, 'gutter set from element width, in px' );
}
function setPercentageGrid() {
gridSizer.style.width = '40%';
pckry.once( 'layoutComplete', function() {
checkPackeryGrid( pckry );
done();
});
pckry.layout();
assert.equal( pckry.columnWidth, 32, 'columnWidth is set from element width, in percentage' );
}
});
QUnit.test( 'columnWidth, rowHeight, gutter via selector', function( assert ) {
var container = document.querySelector('#gridded2');
appendRandomSizedItems( container );
var pckry = new Packery( container, {
itemSelector: '.item',
columnWidth: '.grid-sizer',
rowHeight: '.grid-sizer',
gutter: '.gutter-sizer'
});
assert.equal( pckry.columnWidth, 30, 'columnWidth' );
assert.equal( pckry.rowHeight, 25, 'rowHeight' );
assert.equal( pckry.gutter, 10, 'gutter' );
});

8
node_modules/packery/test/unit/hidden-items.js generated vendored Normal file
View File

@@ -0,0 +1,8 @@
QUnit.test( 'hidden items', function( assert ) {
var container = document.querySelector('#hidden-items');
var pckry = new Packery( container );
var itemElem1 = pckry.items[1].element;
var itemElem2 = pckry.items[2].element;
assert.equal( itemElem1.style.left, '0px', '2nd item on left' );
assert.equal( itemElem2.style.top, '0px', '3rd item on top' );
});

8
node_modules/packery/test/unit/is-init-layout.js generated vendored Normal file
View File

@@ -0,0 +1,8 @@
QUnit.test( 'initLayout', function( assert ) {
var container = document.querySelector('#is-init-layout');
var pckry = new Packery( container, {
initLayout: false
});
assert.ok( !pckry._isLayoutInited, 'packy is not layout initialized' );
assert.equal( container.children[0].style.left, '', 'no style on first child' );
});

31
node_modules/packery/test/unit/jquery-plugin.js generated vendored Normal file
View File

@@ -0,0 +1,31 @@
QUnit.test( 'jQuery plugin', function( assert ) {
var $ = window.jQuery;
var done = assert.async();
var $elem = $('#jquery');
assert.ok( $.fn.packery, '.packery is in jQuery.fn namespace' );
assert.equal( typeof $elem.packery, 'function', '.packery is a plugin' );
$elem.packery();
var pckry = $elem.data('packery');
assert.ok( pckry, 'packery instance via .data()' );
assert.equal( pckry, Packery.data( $elem[0] ), 'instance matches the same one via Packery.data()' );
var item4 = $elem.children()[4];
assert.equal( item4.style.left, '0px', '5th item left' );
assert.equal( item4.style.top, '40px', '5th item top' );
$elem.children().first().css({
width: 48,
height: 8,
background: 'blue'
});
$elem.packery( 'on', 'layoutComplete', function() {
assert.ok( true, 'layoutComplete event emitted' );
assert.equal( item4.style.left, '20px', '4th item left after layout' );
assert.equal( item4.style.top, '30px', '4th item top after layout' );
done();
});
$elem.packery();
});

14
node_modules/packery/test/unit/layout-extra-big.js generated vendored Normal file
View File

@@ -0,0 +1,14 @@
QUnit.test( 'layout extra big', function( assert ) {
var container = document.querySelector('#layout-extra-big');
var pckry = new Packery( container );
var elem1 = pckry.items[1].element;
var elem2 = pckry.items[2].element;
var elem3 = pckry.items[3].element;
var elem4 = pckry.items[4].element;
assert.equal( elem1.style.top, '20px', '2nd item top' );
assert.equal( elem2.style.top, '40px', '3rd item top' );
assert.equal( elem3.style.top, '20px', '4th item top' );
assert.equal( elem4.style.top, '60px', '5th item top' );
});

55
node_modules/packery/test/unit/layout.js generated vendored Normal file
View File

@@ -0,0 +1,55 @@
QUnit.test( 'layout', function( assert ) {
var done = assert.async();
function checkItemPosition( elem, left, top, message ) {
message = message || '';
var actual = elem.style.left + ' ' + elem.style.top;
var expected = left + 'px ' + top + 'px';
assert.equal( actual, expected, expected + ' ' + message );
}
var container = document.querySelector('#layout');
var pckry = new Packery( container );
var elem0 = pckry.items[0].element;
var elem1 = pckry.items[1].element;
var elem2 = pckry.items[2].element;
var elem3 = pckry.items[3].element;
checkItemPosition( elem0, 0, 0, 'first item' );
checkItemPosition( elem1, 40, 0, '2nd item' );
checkItemPosition( elem2, 0, 20, '3rd item' );
assert.equal( container.style.height, '60px', 'height set' );
// change size of elems to change layout
elem0.style.width = '18px';
elem3.style.height = '58px';
var items = pckry._getItemsForLayout( pckry.items );
pckry.once( 'layoutComplete', function( completeItems ) {
assert.equal( true, true, 'layoutComplete event did fire' );
assert.equal( completeItems.length, items.length, 'event-emitted items matches layout items length' );
assert.strictEqual( completeItems[0], items[0], 'event-emitted items has same first item' );
var len = completeItems.length - 1;
assert.strictEqual( completeItems[ len ], items[ len ], 'event-emitted items has same last item' );
checkItemPosition( elem1, 20, 0, '2nd item' );
checkItemPosition( elem2, 40, 0, '3nd item' );
setTimeout( checkHorizontal );
});
pckry.layout();
assert.equal( container.style.height, '80px', 'height set' );
function checkHorizontal() {
// disable transition
pckry.options.transitionDuration = 0;
pckry.options.horizontal = true;
pckry.layout();
checkItemPosition( elem0, 0, 0, 'horizontal, first item' );
checkItemPosition( elem1, 0, 20, 'horizontal, 2nd item' );
checkItemPosition( elem2, 0, 60, 'horizontal, 2nd item' );
assert.equal( container.style.width, '60px', 'width set' );
done();
}
});

35
node_modules/packery/test/unit/prepend.js generated vendored Normal file
View File

@@ -0,0 +1,35 @@
QUnit.test( 'prepend', function( assert ) {
var container = document.querySelector('#prepend');
var pckry = new Packery( container );
var itemElemA = pckry.items[0].element;
var itemElemB = pckry.items[1].element;
var itemElemC = gimmeAnItemElement();
itemElemC.style.background = 'orange';
var itemElemD = gimmeAnItemElement();
itemElemD.style.background = 'magenta';
var done = assert.async();
var ticks = 0;
pckry.on( 'layoutComplete', function() {
assert.ok( true, 'layoutComplete triggered' );
ticks++;
if ( ticks == 2 ) {
assert.ok( true, '2 layoutCompletes triggered' );
done();
}
});
var fragment = document.createDocumentFragment();
fragment.appendChild( itemElemC );
fragment.appendChild( itemElemD );
container.insertBefore( fragment, container.firstChild );
pckry.prepended([ itemElemC, itemElemD ]);
assert.equal( pckry.items[0].element, itemElemC, 'item C is first' );
assert.equal( pckry.items[1].element, itemElemD, 'item D is second' );
assert.equal( pckry.items[2].element, itemElemA, 'item A is third' );
assert.equal( pckry.items[3].element, itemElemB, 'item B is fourth' );
});

24
node_modules/packery/test/unit/remove.js generated vendored Normal file
View File

@@ -0,0 +1,24 @@
QUnit.test( 'remove', function( assert ) {
var done = assert.async();
var container = document.querySelector('#add-remove');
// packery starts with 4 items
var pckry = new Packery( container, {
itemSelector: '.item'
});
// remove two items
var w2Elems = container.querySelectorAll('.w2');
pckry.on( 'removeComplete', function( removedItems ) {
assert.equal( true, true, 'removeComplete event did fire' );
assert.equal( removedItems.length, w2Elems.length, 'remove elems length matches 2nd argument length' );
for ( var i=0, len = removedItems.length; i < len; i++ ) {
assert.equal( removedItems[i].element, w2Elems[i], 'removedItems element matches' );
}
assert.equal( container.children.length, 2, 'elements removed from DOM' );
assert.equal( container.querySelectorAll('.w2').length, 0, 'matched elements were removed' );
done();
});
pckry.remove( w2Elems );
assert.equal( pckry.items.length, 2, 'items removed from Packery instance' );
});

124
node_modules/packery/test/unit/stamped.js generated vendored Normal file
View File

@@ -0,0 +1,124 @@
QUnit.test( 'stamped1', function( assert ) {
var container = document.querySelector('#stamped1');
var stamps = container.querySelectorAll('.stamp');
var pckry = new Packery( container, {
itemSelector: '.item',
stamp: stamps
});
assert.equal( pckry.stamps.length, 2, '2 stamped elements' );
var elem0 = pckry.items[0].element;
assert.equal( elem0.style.left, '0px', '1st item left' );
assert.equal( elem0.style.top, '0px', '1st item top' );
var elem1 = pckry.items[1].element;
assert.equal( elem1.style.left, '52px', '2nd item left' );
assert.equal( elem1.style.top, '0px', '2nd item top' );
var elem2 = pckry.items[2].element;
assert.equal( elem2.style.left, '52px', '3rd item left' );
assert.equal( elem2.style.top, '20px', '3rd item top' );
var elem3 = pckry.items[3].element;
assert.equal( elem3.style.left, '13px', '4th item left' );
assert.equal( elem3.style.top, '35px', '4th item top' );
assert.equal( container.style.height, '75px', 'container height' );
// unstamp first stamp
pckry.unstamp( stamps[1] );
assert.equal( pckry.stamps.length, 1, 'element was unstamped' );
// stamp it back
pckry.stamp( stamps[1] );
assert.equal( pckry.stamps.length, 2, 'element was stamped back' );
});
QUnit.test( 'stamped2, items are stamped', function( assert ) {
var container = document.querySelector('#stamped2');
var stamps = container.querySelectorAll('.stamp');
var pckry = new Packery( container, {
itemSelector: '.item',
stamp: stamps
});
var done = assert.async();
var layoutItems = pckry._getItemsForLayout( pckry.items );
assert.equal( layoutItems.length, 7, '7 layout items' );
var elem0 = layoutItems[0].element;
assert.equal( elem0.style.left, '28px', '1st item left' );
assert.equal( elem0.style.top, '0px', '1st item top' );
var elem3 = layoutItems[3].element;
assert.equal( elem3.style.left, '0px', '4th item left' );
assert.equal( elem3.style.top, '28px', '4th item top' );
var elem4 = layoutItems[4].element;
assert.equal( elem4.style.left, '20px', '5th item left' );
assert.equal( elem4.style.top, '40px', '5th item top' );
// unplacing
pckry.unstamp( stamps );
layoutItems = pckry._getItemsForLayout( pckry.items );
assert.equal( layoutItems.length, 9, '9 layout items' );
assert.equal( pckry.stamps.length, 0, '0 stamps items' );
pckry.on( 'layoutComplete', function() {
var elem0 = pckry.items[0].element;
assert.equal( elem0.style.left, '0px', '1st item left' );
assert.equal( elem0.style.top, '0px', '1st item top' );
var elem4 = pckry.items[4].element;
assert.equal( elem4.style.left, '0px', '5th item left' );
assert.equal( elem4.style.top, '20px', '5th item top' );
done();
});
pckry.layout();
});
QUnit.test( 'stamped3, stamp with selector string ', function( assert ) {
var container3 = document.querySelector('#stamped3');
var pckry3 = new Packery( container3, {
itemSelector: '.item',
stamp: '.stamp'
});
assert.equal( pckry3.stamps.length, 2, '2 stamped elements' );
assert.equal( pckry3.stamps.length, 2, '2 stamped elements' );
var elem0 = pckry3.items[0].element;
assert.equal( elem0.style.left, '0px', '1st item left' );
assert.equal( elem0.style.top, '0px', '1st item top' );
var elem1 = pckry3.items[1].element;
assert.equal( elem1.style.left, '52px', '2nd item left' );
assert.equal( elem1.style.top, '0px', '2nd item top' );
var elem2 = pckry3.items[2].element;
assert.equal( elem2.style.left, '52px', '3rd item left' );
assert.equal( elem2.style.top, '20px', '3rd item top' );
var elem3 = pckry3.items[3].element;
assert.equal( elem3.style.left, '13px', '4th item left' );
assert.equal( elem3.style.top, '35px', '4th item top' );
assert.equal( container3.style.height, '75px', 'container height' );
var container4 = document.querySelector('#stamped4');
var pckry4 = new Packery( container4, {
itemSelector: '.item',
stamp: 'foobar'
});
assert.ok( pckry4._isLayoutInited, 'bad selector didnt cause error' );
});
QUnit.test( 'stamped with borders', function( assert ) {
var container = document.querySelector('#stamped-borders');
var pckry = new Packery( container, {
itemSelector: '.item',
stamp: '.stamp'
});
var elem0 = pckry.items[0].element;
var elem1 = pckry.items[1].element;
var elem2 = pckry.items[2].element;
assert.equal( elem0.style.left, '50px', '1st item left' );
assert.equal( elem1.style.left, '50px', '2nd item left' );
assert.equal( elem2.style.top, '30px', '3rd item top' );
});

33
node_modules/packery/test/unit/sub-pixel-fit.js generated vendored Normal file
View File

@@ -0,0 +1,33 @@
QUnit.test( 'sub-pixel fit', function( assert ) {
var pckry = new Packery( '#sub-pixel-fit', {
itemSelector: '.item',
transitionDuration: 0
});
function getItemsTotalY() {
var y = 0;
for ( var i=0, len = pckry.items.length; i < len; i++ ) {
var item = pckry.items[i];
y += item.rect.y;
}
return y;
}
// iterate over multiple container widths
for ( var containerWidth = 290; containerWidth < 310; containerWidth++ ) {
pckry.element.style.width = containerWidth + 'px';
pckry.layout();
assert.equal( 0, getItemsTotalY(), 'items fit at ' + containerWidth + 'px' );
}
// set grid sizer and do it again
pckry.options.columnWidth = '.grid-sizer';
for ( containerWidth = 290; containerWidth < 310; containerWidth++ ) {
pckry.element.style.width = containerWidth + 'px';
pckry.layout();
assert.equal( 0, getItemsTotalY(), 'items fit with columnWidth at ' + containerWidth + 'px' );
}
});

137
node_modules/packery/test/unit/test-packer.js generated vendored Normal file
View File

@@ -0,0 +1,137 @@
/**
* Packer tests
*/
( function() {
QUnit.module('Packer');
var Packer = Packery.Packer;
var Rect = Packery.Rect;
QUnit.test( 'basics', function( assert ) {
assert.equal( typeof Packer === 'function', true, 'Packery is a function' );
});
QUnit.test( 'packing', function( assert ) {
var packr = new Packer( 30, 100 );
// 112
// 352
// 344
// xxx
// xxx
var rect1 = new Rect({ width: 20, height: 10 });
var rect2 = new Rect({ width: 10, height: 20 });
var rect3 = new Rect({ width: 10, height: 20 });
var rect4 = new Rect({ width: 20, height: 10 });
var rect5 = new Rect({ width: 10, height: 10 });
packr.pack( rect1 );
packr.pack( rect2 );
packr.pack( rect3 );
packr.pack( rect4 );
packr.pack( rect5 );
assert.equal( rect1.x, 0, 'rect1.x top left' );
assert.equal( rect1.y, 0, 'rect1.y top left' );
assert.equal( rect2.x, 20, 'rect2.x top right' );
assert.equal( rect2.y, 0, 'rect2.y top right' );
assert.equal( rect3.x, 0, 'rect3.x bottom left' );
assert.equal( rect3.y, 10, 'rect3.y bottom left' );
assert.equal( rect4.x, 10, 'rect4.x bottom right' );
assert.equal( rect4.y, 20, 'rect4.y bottom right' );
assert.equal( rect5.x, 10, 'rect5.x packed in center' );
assert.equal( rect5.y, 10, 'rect5.y packed in center' );
// bottom space is open
assert.equal( packr.spaces.length, 1, 'one space open' );
var space = packr.spaces[0];
assert.equal( space.width, 30, 'space.width' );
assert.equal( space.height, 70, 'space.height' );
assert.equal( space.x, 0, 'space.x' );
assert.equal( space.y, 30, 'space.y' );
});
QUnit.test( 'packing with a placed', function( assert ) {
var packr = new Packer( 30, 100 );
// 225
// 311
// 34x
// x4x
// xxx
// xxx
var rect1 = new Rect({
width: 20,
height: 10,
x: 10,
y: 10
});
var rect2 = new Rect({ width: 20, height: 10 });
var rect3 = new Rect({ width: 10, height: 20 });
var rect4 = new Rect({ width: 10, height: 20 });
var rect5 = new Rect({ width: 10, height: 10 });
packr.placed( rect1 );
packr.pack( rect2 );
packr.pack( rect3 );
packr.pack( rect4 );
packr.pack( rect5 );
assert.equal( rect2.x, 0, 'rect2.x top left' );
assert.equal( rect2.y, 0, 'rect2.y top left' );
assert.equal( rect3.x, 0, 'rect3.x left side' );
assert.equal( rect3.y, 10, 'rect3.y left side' );
assert.equal( rect4.x, 10, 'rect4.x bottom center' );
assert.equal( rect4.y, 20, 'rect4.y bottom center' );
assert.equal( rect5.x, 20, 'rect5.x packed in top right' );
assert.equal( rect5.y, 0, 'rect5.y packed in top right' );
assert.equal( packr.spaces.length, 3, '3 spaces left' );
});
QUnit.test( 'packing horizontal', function( assert ) {
function checkRect( rect, x, y ) {
assert.equal( rect.x, x, 'x: ' + x );
assert.equal( rect.y, y, 'y: ' + y );
}
var packr = new Packer( 100, 30, 'rightwardTopToBottom' );
// 133xx
// 154xx
// 224xx
var rect1 = new Rect({ width: 10, height: 20 });
var rect2 = new Rect({ width: 20, height: 10 });
var rect3 = new Rect({ width: 20, height: 10 });
var rect4 = new Rect({ width: 10, height: 20 });
var rect5 = new Rect({ width: 10, height: 10 });
packr.pack( rect1 );
packr.pack( rect2 );
packr.pack( rect3 );
packr.pack( rect4 );
packr.pack( rect5 );
checkRect( rect1, 0, 0 );
checkRect( rect2, 0, 20 );
checkRect( rect3, 10, 0 );
checkRect( rect4, 20, 10 );
checkRect( rect5, 10, 10 );
// bottom space is open
assert.equal( packr.spaces.length, 1, 'one space open' );
var space = packr.spaces[0];
assert.equal( space.width, 70, 'space.width' );
assert.equal( space.height, 30, 'space.height' );
checkRect( space, 30, 0 );
});
})();

150
node_modules/packery/test/unit/test-rect.js generated vendored Normal file
View File

@@ -0,0 +1,150 @@
/**
* Rect tests
**/
( function() {
var Rect = Packery.Rect;
QUnit.module('Rect');
QUnit.test( 'Rect defaults', function( assert ) {
var rect = new Rect();
assert.equal( rect.x, 0, 'rect.x = 0' );
assert.equal( rect.y, 0, 'rect.y = 0' );
assert.equal( rect.width, 0, 'rect.width = 0' );
assert.equal( rect.height, 0, 'rect.height = 0' );
});
QUnit.test( 'set properties with initial argument object', function( assert ) {
var rect = new Rect({
x: 40,
y: 390,
width: 103,
height: -4
});
assert.equal( rect.x, 40, 'x' );
assert.equal( rect.y, 390, 'y' );
assert.equal( rect.width, 103, 'width' );
assert.equal( rect.height, -4, 'default height property' );
});
QUnit.test( 'contains', function( assert ) {
var rectA = new Rect({
x: 10,
y: 30,
width: 100,
height: 400
});
var rectB = new Rect({
x: 40,
y: 60,
width: 10,
height: 20
});
assert.strictEqual( rectA.contains( rectB ), true, 'A clearly contains B' );
rectB = new Rect({
x: 500,
y: 40,
width: 40,
height: 20
});
assert.strictEqual( rectA.contains( rectB ), false, 'A clearly does not contain B' );
rectB = new Rect({
x: 20,
y: 40
});
assert.strictEqual( rectA.contains( rectB ), true,
'A contains B, which has no width or height' );
rectB = new Rect({
x: 20,
y: 50,
width: 60,
height: 150
});
assert.strictEqual( rectA.contains( rectB ), true, 'B is at upper left corner of A' );
rectB = new Rect({
x: rectA.x,
y: rectA.y,
width: rectA.width,
height: rectA.height
});
assert.strictEqual( rectA.contains( rectB ), true, 'A contains B. B is equal to A' );
rectB = new Rect({
x: rectA.x - 20,
y: rectA.y,
width: rectA.width,
height: rectA.height
});
assert.strictEqual( rectA.contains( rectB ), false,
'A does not contain B. B same size A, but offset' );
});
QUnit.test( 'overlaps', function( assert ) {
var rectA = new Rect({
x: 100,
y: 50,
width: 300,
height: 200
});
var rectB = new Rect({
x: 150,
y: 100,
width: 100,
height: 50
});
assert.strictEqual( rectA.overlaps( rectB ), true, 'B is inside A, A overlaps B' );
assert.strictEqual( rectB.overlaps( rectA ), true, 'B is inside A, B overlaps A' );
rectB.x = 50;
assert.strictEqual( rectA.overlaps( rectB ), true,
'B overlaps left edge of A, A overlaps B' );
assert.strictEqual( rectB.overlaps( rectA ), true,
'B overlaps left edge of A, B overlaps A' );
rectB.y = 25;
assert.strictEqual( rectA.overlaps( rectB ), true,
'B overlaps left top corner of A, A overlaps B' );
assert.strictEqual( rectB.overlaps( rectA ), true,
'B overlaps left top corner of A, B overlaps A' );
rectB.x = 0;
rectB.y = 0;
assert.strictEqual( rectA.overlaps( rectB ), false,
'B bottom right corner meets A top left corner, A DOES NOT overlap B' );
assert.strictEqual( rectB.overlaps( rectA ), false,
'B bottom right corner meets A top left corner, B DOES NOT overlap A' );
rectB.x = rectA.x - rectB.width;
rectB.y = rectA.y;
rectB.height = rectA.height;
assert.strictEqual( rectA.overlaps( rectB ), false,
'B is completely adjacent to A, A DOES NOT overlap B' );
assert.strictEqual( rectB.overlaps( rectA ), false,
'B is completely adjacent to A, B DOES NOT overlap A' );
});
})();