Have the gallery take better advantage of fullscreen mode.
This commit is contained in:
@@ -16,6 +16,10 @@ import { localize } from '../localize/localize';
|
|||||||
import { renderMessage, renderErrorMessage, renderProgressIndicator } from './message';
|
import { renderMessage, renderErrorMessage, renderProgressIndicator } from './message';
|
||||||
|
|
||||||
import galleryStyle from '../scss/gallery.scss';
|
import galleryStyle from '../scss/gallery.scss';
|
||||||
|
import { styleMap } from 'lit/directives/style-map.js';
|
||||||
|
|
||||||
|
const MAX_THUMBNAIL_WIDTH = 175;
|
||||||
|
const DEFAULT_COLUMNS = 5;
|
||||||
|
|
||||||
@customElement('frigate-card-gallery')
|
@customElement('frigate-card-gallery')
|
||||||
export class FrigateCardGallery extends LitElement {
|
export class FrigateCardGallery extends LitElement {
|
||||||
@@ -28,10 +32,38 @@ export class FrigateCardGallery extends LitElement {
|
|||||||
@property({ attribute: false })
|
@property({ attribute: false })
|
||||||
protected browseMediaQueryParameters!: BrowseMediaQueryParameters;
|
protected browseMediaQueryParameters!: BrowseMediaQueryParameters;
|
||||||
|
|
||||||
|
protected _resizeObserver: ResizeObserver;
|
||||||
|
protected _columns = DEFAULT_COLUMNS;
|
||||||
|
|
||||||
protected _getMediaType(): 'clips' | 'snapshots' {
|
protected _getMediaType(): 'clips' | 'snapshots' {
|
||||||
return this.view?.view == 'clips' ? 'clips' : 'snapshots';
|
return this.view?.view == 'clips' ? 'clips' : 'snapshots';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this._resizeObserver = new ResizeObserver(this._resizeHandler.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
connectedCallback(): void {
|
||||||
|
super.connectedCallback();
|
||||||
|
this._resizeObserver?.observe(this);
|
||||||
|
}
|
||||||
|
disconnectedCallback(): void {
|
||||||
|
this._resizeObserver.disconnect();
|
||||||
|
super.disconnectedCallback();
|
||||||
|
}
|
||||||
|
protected _resizeHandler(): void {
|
||||||
|
let columns = Math.floor(this.clientWidth / MAX_THUMBNAIL_WIDTH);
|
||||||
|
|
||||||
|
if (columns < DEFAULT_COLUMNS) {
|
||||||
|
columns = DEFAULT_COLUMNS;
|
||||||
|
}
|
||||||
|
if (this._columns != columns) {
|
||||||
|
this._columns = columns;
|
||||||
|
this.requestUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected render(): TemplateResult | void {
|
protected render(): TemplateResult | void {
|
||||||
return html`${until(this._render(), renderProgressIndicator())}`;
|
return html`${until(this._render(), renderProgressIndicator())}`;
|
||||||
}
|
}
|
||||||
@@ -57,9 +89,14 @@ export class FrigateCardGallery extends LitElement {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const styles = {
|
||||||
|
width: `calc(${100/this._columns}% - 1.2px)`
|
||||||
|
};
|
||||||
|
|
||||||
|
console.info(this.clientWidth);
|
||||||
return html` <ul class="mdc-image-list frigate-card-gallery">
|
return html` <ul class="mdc-image-list frigate-card-gallery">
|
||||||
${this.view && this.view.previous
|
${this.view && this.view.previous
|
||||||
? html`<li class="mdc-image-list__item">
|
? html`<li class="mdc-image-list__item" style="${styleMap(styles)}">
|
||||||
<div class="mdc-image-list__image-aspect-container">
|
<div class="mdc-image-list__image-aspect-container">
|
||||||
<div class="mdc-image-list__image">
|
<div class="mdc-image-list__image">
|
||||||
<ha-card
|
<ha-card
|
||||||
@@ -79,7 +116,7 @@ export class FrigateCardGallery extends LitElement {
|
|||||||
: ''}
|
: ''}
|
||||||
${parent.children.map(
|
${parent.children.map(
|
||||||
(child, index) =>
|
(child, index) =>
|
||||||
html` <li class="mdc-image-list__item">
|
html` <li class="mdc-image-list__item" style="${styleMap(styles)}">
|
||||||
<div class="mdc-image-list__image-aspect-container">
|
<div class="mdc-image-list__image-aspect-container">
|
||||||
${child.can_expand
|
${child.can_expand
|
||||||
? html`<div class="mdc-image-list__image">
|
? html`<div class="mdc-image-list__image">
|
||||||
|
|||||||
Reference in New Issue
Block a user