five-bells-visualization
Version:
Tool to visualize Five Bells payments
231 lines (216 loc) • 7.81 kB
HTML
<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
<head>
<title>core-list</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<script src="../../webcomponentsjs/webcomponents.js"></script>
<link rel="import" href="../core-list.html">
<link rel="import" href="../../core-ajax/core-ajax.html">
<link rel="import" href="../../core-icon/core-icon.html">
<link rel="import" href="../../core-icon-button/core-icon-button.html">
<link rel="import" href="../../core-icons/core-icons.html">
<link rel="import" href="../../paper-shadow/paper-shadow.html">
<link rel="import" href="../../paper-icon-button/paper-icon-button.html">
<link rel="import" href="../../paper-fab/paper-fab.html">
<link rel="import" href="../../paper-menu-button/paper-menu-button.html">
<link rel="import" href="../../paper-dropdown/paper-dropdown.html">
<link rel="import" href="../../core-menu/core-menu.html">
<link rel="import" href="../../paper-item/paper-item.html">
<link rel="import" href="../../paper-input/paper-input.html">
<link rel="import" href="../../paper-tabs/paper-tabs.html">
<link rel="import" href="../../core-animated-pages/core-animated-pages.html">
<link rel="import" href="../../core-overlay/core-overlay.html">
<link rel="import" href="../../core-scroll-threshold/core-scroll-threshold.html">
<link rel="import" href="../../core-image/core-image.html">
<style>
html, body {
margin: 0;
-webkit-tap-highlight-color: transparent;
overflow: hidden;
user-select: none;
-webkit-user-select: none;
font-family: sans-serif;
}
list-test {
display: block;
height: 100%;
margin: 0 auto;
}
</style>
</head>
<body fit>
<list-test></list-test>
<polymer-element name="list-test" layout vertical relative>
<template>
<style>
.message-item {
padding: 16px;
}
.message-item.selected{
background-color: #eee;
}
.tabs {
background: #E91E63;
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
color: white;
}
.avatar {
height: 40px;
width: 40px;
border-radius: 20px;
box-sizing: border-box;
border: 1px solid #DDD;
background-color: #DDD;
}
.pad {
padding: 0 16px;
}
.primary {
font-size: 16px;
}
.secondary {
font-size: 14px;
}
.dim {
color: gray;
}
.divider {
font-size: 14px;
font-weight: bold;
color: gray;
padding: 24px 16px 8px 16px;
}
.border {
margin-left: 72px;
border-bottom: 1px solid #DDD;
}
.photo-item {
box-sizing: border-box;
padding: 8px;
}
.photo {
background-size: cover;
height: 200px;
width: 200px;
box-sizing: border-box;
background-color: lightgray;
}
.title {
position: absolute;
left: 0;
right: 0;
bottom: 0;
padding: 12px 8px 8px 8px;
color: white;
background: rgba(0,0,0,0.3);
}
.photo-pad {
padding: 16px;
align-items: center;
}
.photo-pad-left {
padding-left: 8px;
}
</style>
<core-ajax url="demo-data-500.json" response="{{messageData}}" auto></core-ajax>
<paper-tabs class="tabs" selected="{{page}}" valueattr="name">
<paper-tab name="messages">Messages</paper-tab>
<paper-tab name="photos">Photos</paper-tab>
</paper-tabs>
<core-animated-pages selected="{{page}}" id="pages" valueattr="id" flex>
<core-list id="messages" data="{{messageData}}" groups="{{messageGroups}}">
<template>
<div class="divider" divider>{{groupModel.label}}</div>
<div>
<div class="message-item {{selected?'selected':''}}" layout horizontal>
<img class="avatar" src="{{model.image}}">
<div class="pad" flex layout vertical>
<div class="primary">{{index}} {{model.name}}</div>
<div class="secondary">{{model.shortText}}</div>
<div class="secondary dim Xclamp">{{model.longText}}</div>
</div>
<core-icon icon="{{model.boolean ? 'star' : 'star-outline'}}"></core-icon>
</div>
<div class="border"></div>
</div>
</template>
</core-list>
<div id="photos" style="overflow:auto;">
<core-scroll-threshold id="threshold" scrollTarget="{{$.photos}}"
lowerThreshold="1000" on-lower-trigger="{{loadMore}}">
</core-scroll-threshold>
<core-list id="photosList" data="{{photosData}}" scrollTarget="{{$.photos}}" grid width="216">
<template>
<div class="photo-item">
<core-image class="photo" sizing="cover" load?="{{!!model}}" src="https://farm{{model.farm}}.staticflickr.com/{{model.server}}/{{model.id}}_{{model.secret}}_m.jpg" preload relative>
<div class="title">{{index}} {{model.title}}</div>
</core-image>
</div>
</template>
</core-list>
<div class="photo-pad" hidden?="{{!$.threshold.lowerTriggered}}" layout horizontal center-justified>
<paper-spinner active></paper-spinner>
<div class="photo-pad-left">Loading...</div>
</div>
</div>
</core-animated-pages>
</template>
<script>
(function() {
Polymer('list-test', {
page: 'messages',
ready: function() {
CoreStyle.g.paperInput.focusedColor = 'white';
this.messageGroups = [
{length: 3, data: {label: 'Today'}},
{length: 15, data: {label: 'Yesterday'}},
{length: 30, data: {label: 'Last Week'}},
{length: 150, data: {label: 'Last Month'}},
{length: 150, data: {label: 'Last Quarter'}},
{length: 152, data: {label: 'Last Year'}}
];
this.photosData = [];
this.photosPage = 1;
this.searchText = 'Japan';
this.apiKey = 'c304f1096a06486d3c1e7ab271bf7f3f';
this.perPage = 100;
this.load(1);
},
loadMore: function() {
this.load();
},
load: function(moreCount) {
if (this.photosPage > 0) {
var ajax = document.createElement('core-ajax');
ajax.url = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=' +
this.apiKey + '&safe_search=1&sort=interestingness-desc&text=' +
encodeURIComponent(this.searchText) + '&page=' + this.photosPage + "&format=json&per_page=" + this.perPage;
ajax.addEventListener('core-response', function(e) {
var data = this.photosData;
var resp = JSON.parse(e.detail.response.match('jsonFlickrApi\\((.*)\\)')[1]);
if (resp.stat == 'ok') {
resp.photos.photo.forEach(function(o) { data.push(o); });
this.photosPage = (resp.photos.page != resp.photos.pages) ? resp.photos.page + 1 : 0;
this.$.threshold.clearLower(!!this.photosPage);
if (moreCount) {
this.load(--moreCount);
}
}
}.bind(this));
ajax.go();
}
}
});
})();
</script>
</polymer-element>
</body>
</html>