mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 03:18:19 -07:00
172 lines
6.1 KiB
HTML
172 lines
6.1 KiB
HTML
<link rel="import" href="../polymer/polymer.html">
|
|
<link rel="import" href="../iron-icon/iron-icon.html">
|
|
<link rel="import" href="../neon-animation/neon-animation-runner-behavior.html">
|
|
<link rel="import" href="../neon-animation/animations/transform-animation.html">
|
|
<link rel="import" href="../iron-collapse/iron-collapse.html">
|
|
|
|
<iron-iconset-svg name="emby-collapsible-icons" size="24">
|
|
<svg>
|
|
<defs>
|
|
<g id="expand-less"><path d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z" /></g>
|
|
<g id="expand-more"><path d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" /></g>
|
|
</defs>
|
|
</svg>
|
|
</iron-iconset-svg>
|
|
|
|
<dom-module id="emby-collapsible">
|
|
<template>
|
|
<style>
|
|
iron-collapse {
|
|
padding-left: 16px;
|
|
padding-right: 16px;
|
|
}
|
|
|
|
:host:not([icon]) #titleIcon {
|
|
display: none !important;
|
|
}
|
|
|
|
:host #titleIcon {
|
|
margin-right: 1em;
|
|
}
|
|
|
|
:host #expandButton {
|
|
margin: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
</style>
|
|
<div>
|
|
<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button block">
|
|
<iron-icon id="titleIcon" icon="[[icon]]" style="[[iconstyle]]"></iron-icon>
|
|
<h3 class="emby-collapsible-title" title="[[title]]">[[title]]</h3>
|
|
<iron-icon id="expandIcon" style="margin-left: auto; margin-right: .5em;"></iron-icon>
|
|
</button>
|
|
<iron-collapse id="contentCollapse" class="emby-collapsible-content" opened="{{expanded}}">
|
|
<content></content>
|
|
</iron-collapse>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
Polymer({
|
|
is: 'emby-collapsible',
|
|
behaviors: [Polymer.NeonAnimationRunnerBehavior],
|
|
properties: {
|
|
expanded: {
|
|
type: Boolean,
|
|
value: false,
|
|
notify: true,
|
|
observer: '_expandedChanged'
|
|
},
|
|
expandMoreTitle: {
|
|
type: String,
|
|
value: "Show More"
|
|
},
|
|
expandLessTitle: {
|
|
type: String,
|
|
value: "Show Less"
|
|
},
|
|
enableRotateAnimation: {
|
|
type: Boolean,
|
|
value: true
|
|
},
|
|
expandMoreIcon: {
|
|
type: String,
|
|
value: "expand-more"
|
|
},
|
|
expandLessIcon: {
|
|
type: String,
|
|
value: "expand-less"
|
|
},
|
|
animationConfig: {
|
|
value: function () {
|
|
return {
|
|
'rotateIcon': {
|
|
name: 'transform-animation',
|
|
node: this.$.expandIcon,
|
|
transformOrigin: "50% 50%",
|
|
transformFrom: "rotate(0)",
|
|
transformTo: "rotate(180deg)",
|
|
timing: { duration: 350 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
listeners: {
|
|
'neon-animation-finish': '_onNeonAnimationFinish'
|
|
},
|
|
_onNeonAnimationFinish: function () {
|
|
if (this.expanded) {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-less";
|
|
}
|
|
else {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-more";
|
|
}
|
|
},
|
|
|
|
// Fires when an instance of the element is created
|
|
created: function () { },
|
|
|
|
// Fires when the local DOM has been fully prepared
|
|
ready: function () {
|
|
//Set initial icon
|
|
if (this.expanded) {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-less";
|
|
}
|
|
else {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-more";
|
|
}
|
|
|
|
//Set initial title
|
|
if (this.expanded) {
|
|
this.$.expandButton.title = this.expandLessTitle;
|
|
}
|
|
else {
|
|
this.$.expandButton.title = this.expandMoreTitle;
|
|
}
|
|
},
|
|
|
|
// Fires when the element was inserted into the document
|
|
attached: function () { },
|
|
|
|
// Fires when the element was removed from the document
|
|
detached: function () { },
|
|
|
|
// Fires when an attribute was added, removed, or updated
|
|
_expandedChanged: function (newVal, oldVal) {
|
|
|
|
|
|
//If icon is already set no need to animate!
|
|
if ((newVal && (this.$.expandIcon.icon == "emby-collapsible-icons:expand-less")) || (!newVal && (this.$.expandIcon.icon == "emby-collapsible-icons:expand-more"))) {
|
|
return;
|
|
}
|
|
|
|
//Set title
|
|
if (newVal) {
|
|
this.$.expandButton.title = this.expandLessTitle;
|
|
}
|
|
else {
|
|
this.$.expandButton.title = this.expandMoreTitle;
|
|
}
|
|
|
|
if (this.enableRotateAnimation) {
|
|
//Play rotate animation
|
|
this.cancelAnimation();
|
|
this.playAnimation('rotateIcon');
|
|
}
|
|
else {
|
|
if (this.expanded) {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-less";
|
|
}
|
|
else {
|
|
this.$.expandIcon.icon = "emby-collapsible-icons:expand-more";
|
|
}
|
|
}
|
|
},
|
|
toggleExpand: function () {
|
|
this.expanded = !this.expanded;
|
|
}
|
|
});
|
|
</script>
|
|
</dom-module>
|