blob: 696489f33d664b04885138798889c7adc2c9ca16 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2016 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<!--
An element displaying basic information about a display item in a list view.
-->
<dom-module id='tr-ui-e-chrome-cc-display-item-list-item'>
<template>
<style>
:host {
border-bottom: 1px solid #555;
display: block;
font-size: 12px;
padding: 3px 5px;
}
:host(:hover) {
background-color: #f0f0f0;
cursor: pointer;
}
.header {
font-weight: bold;
margin: 2px 0;
}
.header > .extra {
background-color: #777;
border-radius: 4px;
color: white;
margin: 0 6px;
text-decoration: none;
padding: 2px 4px;
}
.raw-details {
white-space: pre-wrap;
}
.details > dl {
margin: 0;
}
:host(:not([selected])) .details {
display: none;
}
</style>
<div class="header">
{{name}}
<template is="dom-if" if="{{_computeIf(richDetails)}}">
<a class="extra" href$="{{_computeHref(richDetails)}}"
download="drawing.skp" on-click="{{stopPropagation}}">SKP</a>
</template>
</div>
<div class="details">
<template if="{{rawDetails}}">
<div class="raw-details">{{rawDetails}}</div>
</template>
<template is="dom-if" if="{{richDetails}}" bind="{{richDetails}}">
<dl>
<template is="dom-if" if="{{cullRect}}" bind="{{cullRect}}">
<dt>Cull rect</dt>
<dd>{{x}},{{y}} {{width}}&times;{{height}}</dd>
</template>
<template is="dom-if" if="{{visualRect}}" bind="{{visualRect}}">
<dt>Visual rect</dt>
<dd>{{x}},{{y}} {{width}}&times;{{height}}</dd>
</template>
</dl>
</template>
</div>
</template>
<script>
'use strict';
(function() {
// Extracts the "type" and "details" parts of the unstructured (plaintext)
// display item format, even if the details span multiple lines.
// For example, given "FooDisplayItem type=hello\nworld", produces
// "FooDisplayItem" as the first capture and "type=hello\nworld" as the
// second. Either capture could be the empty string, but this regex will
// still successfully match.
var DETAILS_SPLIT_REGEX = /^(\S*)\s*([\S\s]*)$/;
Polymer({
is: 'tr-ui-e-chrome-cc-display-item-list-item',
created: function() {
// TODO(charliea): Why is setAttribute necessary here but not below? We
// should reach out to the Polymer team to figure out.
Polymer.dom(this).setAttribute('name', '');
Polymer.dom(this).setAttribute('rawDetails', '');
Polymer.dom(this).setAttribute('richDetails', undefined);
Polymer.dom(this).setAttribute('data_', undefined);
},
get data() {
return this.data_;
},
set data(data) {
this.data_ = data;
if (!data) {
this.name = 'DATA MISSING';
this.rawDetails = '';
this.richDetails = undefined;
} else if (typeof data === 'string') {
var match = data.match(DETAILS_SPLIT_REGEX);
this.name = match[1];
this.rawDetails = match[2];
this.richDetails = undefined;
} else {
this.name = data.name;
this.rawDetails = '';
this.richDetails = data;
}
},
stopPropagation: function(e) {
e.stopPropagation();
},
_computeIf: function(richDetails) {
return richDetails && richDetails.skp64;
},
_computeHref: function(richDetails) {
return 'data:application/octet-stream;base64,' + richDetails.skp64;
}
});
})();
</script>