-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmedia-metadata.html
116 lines (103 loc) · 2.76 KB
/
media-metadata.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<link rel="import" href="../polymer/polymer.html">
<!--
`media-metadata`
The MediaMetadata interface of Media Session API implemented in Polymer.
@demo demo/index.html
-->
<dom-module id="media-metadata">
<template>
<style>
:host {
display: none;
}
</style>
<content id="artwork" select="media-image"></content>
</template>
<script>
Polymer({
is: 'media-metadata',
properties: {
title: {
type: String,
value: ''
},
artist: {
type: String,
value: ''
},
album: {
type: String,
value: ''
},
artwork: {
type: Array,
readOnly: true,
value: function() {
return [];
}
},
active: {
type: Boolean,
value: false
}
},
observers: [
'_mediaMetadataChanged(active, title, artist, album, artwork)'
],
attached: function() {
this._updateArtwork();
},
dettached: function() {
if ('mediaSession' in navigator) {
navigator.mediaSession.metadata = null;
}
},
_mediaMetadataChanged: function(active, title, artist, album, artwork) {
if ('mediaSession' in navigator) {
if (active) {
navigator.mediaSession.metadata = new MediaMetadata({
title: title,
artist: artist,
album: album,
artwork: artwork
});
} else {
navigator.mediaSession.metadata = null;
}
}
},
_updateArtwork: function() {
var newArtwork = Array.prototype.slice.call(
Polymer.dom(this.$.artwork).getDistributedNodes()
);
// do not recompute if items have not been added or removed
if (newArtwork.length === this.artwork.length) {
var added = newArtwork.filter(function(item) {
return this.artwork && this.artwork.indexOf(item) === -1;
}.bind(this));
if (added.length === 0) {
// set up observer first time around
if (!this._artworkObserver) {
this._observeArtwork();
}
return;
}
}
this._observeArtwork();
this._setArtwork(newArtwork.map(function(mediaImage){
return {
src: mediaImage.src,
sizes: mediaImage.sizes,
type: mediaImage.type
};
}));
},
_observeArtwork: function() {
// Watch for future updates.
if (!this._artworkObserver) {
this._artworkObserver = Polymer.dom(this.$.artwork).observeNodes(this._updateArtwork.bind(this));
}
},
});
</script>
</dom-module>