Skip to content
This repository was archived by the owner on Mar 13, 2018. It is now read-only.

Commit 86b8754

Browse files
committed
Add CoreResizable support. Add resizable demos. Update to element API changes.
1 parent 08b90f8 commit 86b8754

9 files changed

+968
-38
lines changed

bower.json

+10-2
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,29 @@
33
"private": true,
44
"dependencies": {
55
"polymer": "Polymer/polymer#master",
6-
"core-selection": "Polymer/core-selection#master"
6+
"core-selection": "Polymer/core-selection#master",
7+
"core-resizable": "Polymer/core-resizable#master"
78
},
89
"devDependencies": {
910
"web-component-tester": "Polymer/web-component-tester#master",
1011
"core-ajax": "Polymer/core-ajax#master",
12+
"core-animated-pages": "Polymer/core-animated-pages#master",
1113
"core-icon": "Polymer/core-icon#master",
1214
"core-icon-button": "Polymer/core-icon-button#master",
1315
"core-icons": "Polymer/core-icons#master",
1416
"core-image": "Polymer/core-image#master",
17+
"core-menu": "Polymer/core-menu#master",
1518
"core-media-query": "Polymer/core-media-query#master",
1619
"core-menu": "Polymer/core-menu#master",
1720
"core-overlay": "Polymer/core-overlay#master",
1821
"core-scroll-header-panel": "Polymer/core-scroll-header-panel#master",
1922
"core-scroll-threshold": "Polymer/core-scroll-threshold#master",
2023
"core-selector": "Polymer/core-selector#master",
24+
"core-splitter": "Polymer/core-splitter#master",
2125
"core-toolbar": "Polymer/core-toolbar#master",
26+
"core-tooltip": "Polymer/core-tooltip#master",
27+
"paper-button": "Polymer/paper-button#master",
28+
"paper-dialog": "Polymer/paper-dialog#master",
2229
"paper-dropdown": "Polymer/paper-dropdown#master",
2330
"paper-fab": "Polymer/paper-fab#master",
2431
"paper-icon-button": "Polymer/paper-icon-button#master",
@@ -27,6 +34,7 @@
2734
"paper-menu-button": "Polymer/paper-menu-button#master",
2835
"paper-shadow": "Polymer/paper-shadow#master",
2936
"paper-slider": "Polymer/paper-slider#master",
30-
"paper-spinner": "Polymer/paper-spinner#master"
37+
"paper-spinner": "Polymer/paper-spinner#master",
38+
"paper-tabs": "Polymer/paper-tabs#master"
3139
}
3240
}

core-list.html

+34-25
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,9 @@
165165
-->
166166
<link rel="import" href="../polymer/polymer.html">
167167
<link rel="import" href="../core-selection/core-selection.html">
168+
<link rel="import" href="../core-resizable/core-resizable.html">
168169

169-
<polymer-element name="core-list" on-tap="{{tapHandler}}" tabindex="-1">
170+
<polymer-element name="core-list" tabindex="-1">
170171
<template>
171172
<core-selection id="selection" multi="{{multi}}" on-core-select="{{selectedHandler}}"></core-selection>
172173
<link rel="stylesheet" href="core-list.css">
@@ -178,7 +179,7 @@
178179
var IOS = navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\d+)/);
179180
var IOS_TOUCH_SCROLLING = IOS && IOS[1] >= 8;
180181

181-
Polymer('core-list', {
182+
Polymer(Polymer.mixin({
182183

183184
publish: {
184185
/**
@@ -328,11 +329,16 @@
328329

329330
},
330331

332+
eventDelegates: {
333+
tap: 'tapHandler',
334+
'core-resize': 'updateSize'
335+
},
336+
331337
// Local cache of scrollTop
332338
_scrollTop: 0,
333339

334340
observe: {
335-
'data grid width template scrollTarget': 'initialize',
341+
'isAttached data grid width template scrollTarget': 'initialize',
336342
'multi selectionEnabled': '_resetSelection'
337343
},
338344

@@ -357,35 +363,34 @@
357363
this._nestedGroups = false;
358364
this._groupStart = 0;
359365
this._groupStartIndex = 0;
360-
361-
this._boundResizeHandler = this.updateSize.bind(this);
362-
window.addEventListener('resize', this._boundResizeHandler);
363366
},
364367

365368
attached: function() {
369+
this.isAttached = true;
366370
this.template = this.querySelector('template');
367371
if (!this.template.bindingDelegate) {
368372
this.template.bindingDelegate = this.element.syntax;
369373
}
374+
this.resizeableAttachedHandler();
370375
},
371376

372377
detached: function() {
378+
this.isAttached = false;
373379
this.removeEventListener(this._boundScrollHandler);
374-
this.removeEventListener(this._boundResizeHandler);
380+
this.resizeableDetachedHandler();
375381
},
376382

377383
/**
378-
* To be called by the user when the list is resized or shown
379-
* after being hidden. Note, `core-list` calls this automatically
380-
* when the window is resized.
384+
* To be called by the user when the list is manually resized
385+
* or shown after being hidden.
381386
*
382387
* @method updateSize
383388
*/
384389
updateSize: function() {
385-
if (this.grid) {
390+
if (!this._positionPending && !this._needItemInit) {
386391
this._resetIndex(this._getFirstVisibleIndex() || 0);
392+
this.initialize();
387393
}
388-
this.initializeData();
389394
},
390395

391396
_resetSelection: function() {
@@ -438,7 +443,7 @@
438443
}
439444
// Adjust offset/scroll position based on total number of items changed
440445
if (this._virtualStart < this._physicalCount) {
441-
this._resetIndex(this._getFirstVisibleIndex());
446+
this._resetIndex(this._getFirstVisibleIndex() || 0);
442447
} else {
443448
totalDelta = Math.max((totalDelta / this._rowFactor) * this._physicalAverage, -this._physicalOffset);
444449
this._physicalOffset += totalDelta;
@@ -458,13 +463,12 @@
458463

459464
groupsChanged: function() {
460465
if (!!this.groups != this._grouped) {
461-
this.initialize();
462-
this._resetIndex(this._getFirstVisibleIndex() || this._virtualStart);
466+
this.updateSize();
463467
}
464468
},
465469

466470
initialize: function() {
467-
if (!this.template) {
471+
if (!this.template || !this.isAttached) {
468472
return;
469473
}
470474

@@ -601,7 +605,9 @@
601605
throw 'Grid requires the `width` property to be set';
602606
}
603607
this._rowFactor = Math.floor(this._target.offsetWidth / this.width) || 1;
604-
this._rowMargin = (this._target.offsetWidth - (this._rowFactor * this.width)) / 2;
608+
var cs = getComputedStyle(this._target);
609+
var padding = parseInt(cs.paddingLeft || 0) + parseInt(cs.paddingRight || 0);
610+
this._rowMargin = (this._target.offsetWidth - (this._rowFactor * this.width) - padding) / 2;
605611
} else {
606612
this._rowFactor = 1;
607613
this._rowMargin = 0;
@@ -649,7 +655,11 @@
649655

650656
// Add physical items up to a max based on data length, viewport size, and extra item overhang
651657
var currentCount = this._physicalCount || 0;
652-
this._physicalCount = Math.min(Math.ceil(this._target.offsetHeight / (this._physicalAverage || this.height)) * this.runwayFactor * this._rowFactor, this._virtualCount);
658+
var height = this._target.offsetHeight;
659+
if (!height && this._target.offsetParent) {
660+
console.warn('core-list must either be sized or be inside an overflow:auto div that is sized');
661+
}
662+
this._physicalCount = Math.min(Math.ceil(height / (this._physicalAverage || this.height)) * this.runwayFactor * this._rowFactor, this._virtualCount);
653663
this._physicalCount = Math.max(currentCount, this._physicalCount);
654664
this._physicalData = this._physicalData || new Array(this._physicalCount);
655665
var needItemInit = false;
@@ -781,10 +791,9 @@
781791

782792
// Measure content in scroller before virtualized items
783793
if (this._target != this) {
784-
var el1 = this.previousElementSibling;
785-
this._aboveSize = el1 ? el1.offsetTop + el1.offsetHeight : 0;
794+
this._aboveSize = this.offsetTop;
786795
} else {
787-
this._aboveSize = 0;
796+
this._aboveSize = parseInt(getComputedStyle(this._target).paddingTop);
788797
}
789798

790799
// Calculate average height
@@ -1234,7 +1243,7 @@
12341243
var virtualIndex = this._virtualStart + i;
12351244
var physicalIndex = this._virtualToPhysical(virtualIndex);
12361245
var item = this._physicalItems[physicalIndex];
1237-
if (item._translateY >= this._scrollTop) {
1246+
if (!item.hidden && item._translateY >= this._scrollTop - this._aboveSize) {
12381247
return virtualIndex;
12391248
}
12401249
}
@@ -1244,8 +1253,8 @@
12441253
index = Math.min(index, this._virtualCount-1);
12451254
index = Math.max(index, 0);
12461255
this.changeStartIndex(index - this._virtualStart);
1247-
this._scrollTop = this.setScrollTop((index / this._rowFactor) * this._physicalAverage);
1248-
this._physicalOffset = this._scrollTop;
1256+
this._scrollTop = this.setScrollTop(this._aboveSize + (index / this._rowFactor) * this._physicalAverage);
1257+
this._physicalOffset = this._scrollTop - this._aboveSize;
12491258
this._dir = 0;
12501259
},
12511260

@@ -1288,7 +1297,7 @@
12881297
this.refresh();
12891298
}
12901299

1291-
});
1300+
}, Polymer.CoreResizable));
12921301

12931302
})();
12941303
</script>

demo.html

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<title>core-list</title>
1313
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
1414
<script src="../webcomponentsjs/webcomponents.js"></script>
15+
<link rel="import" href="../polymer/polymer.html">
1516
<link rel="import" href="core-list.html">
1617
<style>
1718
html, body {

demos/demo-data-grouped-short.json

-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
{"letter": "U"},
2424
{"letter": "V"},
2525
{"letter": "W"},
26-
{"letter": "X"},
2726
{"letter": "Y"},
2827
{"letter": "Z"}
2928
],
@@ -3283,7 +3282,6 @@
32833282
"text": "Deserunt ad dolore aliquip magna deserunt eu velit labore elit. Ut labore consequat ad amet et magna aute deserunt culpa labore officia ullamco.",
32843283
"color": "rgb(216,110,116)"
32853284
}],
3286-
[],
32873285
[{
32883286
"index": 4820,
32893287
"name": "Yang Chambers",

demos/demo-flickr-responsive.html

+22-7
Original file line numberDiff line numberDiff line change
@@ -124,21 +124,36 @@
124124
</paper-dropdown>
125125
</paper-menu-button>
126126
<paper-menu-button>
127-
<paper-icon-button icon="{{modeEl.icon}}" noink></paper-icon-button>
127+
<paper-icon-button icon="{{modeEl.dataset.icon}}" noink></paper-icon-button>
128128
<paper-dropdown class="dropdown">
129129
<core-menu class="menu" selected="{{mode}}" selectedItem="{{modeEl}}">
130-
<paper-item name="grid" icon="view-module">Grid</paper-item>
131-
<paper-item name="list" icon="view-list">List</paper-item>
132-
<paper-item name="responsive" icon="device:devices">Responsive</paper-item>
130+
<paper-item name="grid" data-icon="view-module">
131+
<core-icon icon="view-module"></core-icon>
132+
<span class="pad-left">Grid</span>
133+
</paper-item>
134+
<paper-item name="list" data-icon="view-list">
135+
<core-icon icon="view-list"></core-icon>
136+
<span class="pad-left">List</span>
137+
</paper-item>
138+
<paper-item name="responsive" icon="device:devices">
139+
<core-icon icon="device:devices"></core-icon>
140+
<span class="pad-left">Responsive</span>
141+
</paper-item>
133142
</core-menu>
134143
</paper-dropdown>
135144
</paper-menu-button>
136145
<paper-menu-button>
137-
<paper-icon-button icon="{{groupedEl.icon}}" noink></paper-icon-button>
146+
<paper-icon-button icon="{{groupedEl.dataset.icon}}" noink></paper-icon-button>
138147
<paper-dropdown class="dropdown">
139148
<core-menu class="menu" selected="{{grouped}}" selectedItem="{{groupedEl}}">
140-
<paper-item name="yes" icon="image:filter-none">Show Groups</paper-item>
141-
<paper-item name="no" icon="image:crop-din">No Groups</paper-item>
149+
<paper-item name="yes" data-icon="image:filter-none">
150+
<core-icon icon="image:filter-none"></core-icon>
151+
<span class="pad-left">Show Groups</span>
152+
</paper-item>
153+
<paper-item name="no" data-icon="image:crop-din">
154+
<core-icon icon="image:crop-din"></core-icon>
155+
<span class="pad-left">No Groups</span>
156+
</paper-item>
142157
</core-menu>
143158
</paper-dropdown>
144159
</paper-menu-button>

demos/demo-messages.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,10 @@
125125
<core-toolbar class="toolbar">
126126
<paper-menu-button>
127127
<paper-icon-button icon="menu" noink></paper-icon-button>
128-
<paper-dropdown class="dropdown">
128+
<paper-dropdown class="dropdown" layered>
129129
<core-menu class="menu" on-core-activate="{{jumpToGroup}}">
130130
<template repeat="{{group, index in groups}}">
131-
<paper-item label="{{group.data.label}}"></paper-item>
131+
<paper-item>{{group.data.label}}</paper-item>
132132
</template>
133133
</core-menu>
134134
</paper-dropdown>

0 commit comments

Comments
 (0)