|
|
|
/*
|
|
|
|
* https://github.com/morethanwords/tweb
|
|
|
|
* Copyright (C) 2019-2021 Eduard Kuzmenko
|
|
|
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE
|
|
|
|
*/
|
|
|
|
|
|
|
|
import {Layouter, RectPart} from './groupedLayout';
|
|
|
|
|
|
|
|
export default function prepareAlbum(options: {
|
|
|
|
container: HTMLElement,
|
|
|
|
items: {w: number, h: number}[],
|
|
|
|
maxWidth: number,
|
|
|
|
minWidth: number,
|
|
|
|
spacing: number,
|
|
|
|
maxHeight?: number,
|
|
|
|
forMedia?: true
|
|
|
|
}) {
|
|
|
|
const layouter = new Layouter(options.items, options.maxWidth, options.minWidth, options.spacing, options.maxHeight);
|
|
|
|
const layout = layouter.layout();
|
|
|
|
|
|
|
|
const widthItem = layout.find((item) => item.sides & RectPart.Right);
|
|
|
|
const width = widthItem.geometry.width + widthItem.geometry.x;
|
|
|
|
|
|
|
|
const heightItem = layout.find((item) => item.sides & RectPart.Bottom);
|
|
|
|
const height = heightItem.geometry.height + heightItem.geometry.y;
|
|
|
|
|
|
|
|
const container = options.container;
|
|
|
|
container.style.width = width + 'px';
|
|
|
|
container.style.height = height + 'px';
|
|
|
|
const children = container.children;
|
|
|
|
|
|
|
|
layout.forEach(({geometry, sides}, idx) => {
|
|
|
|
let div: HTMLElement;
|
|
|
|
div = children[idx] as HTMLElement;
|
|
|
|
if(!div) {
|
|
|
|
div = document.createElement('div');
|
|
|
|
container.append(div);
|
|
|
|
}
|
|
|
|
|
|
|
|
div.classList.add('album-item', 'grouped-item');
|
|
|
|
|
|
|
|
div.style.width = (geometry.width / width * 100) + '%';
|
|
|
|
div.style.height = (geometry.height / height * 100) + '%';
|
|
|
|
div.style.top = (geometry.y / height * 100) + '%';
|
|
|
|
div.style.left = (geometry.x / width * 100) + '%';
|
|
|
|
|
|
|
|
if(sides & RectPart.Left && sides & RectPart.Top) {
|
|
|
|
div.style.borderTopLeftRadius = 'inherit';
|
|
|
|
}
|
|
|
|
|
|
|
|
if(sides & RectPart.Left && sides & RectPart.Bottom) {
|
|
|
|
div.style.borderBottomLeftRadius = 'inherit';
|
|
|
|
}
|
|
|
|
|
|
|
|
if(sides & RectPart.Right && sides & RectPart.Top) {
|
|
|
|
div.style.borderTopRightRadius = 'inherit';
|
|
|
|
}
|
|
|
|
|
|
|
|
if(sides & RectPart.Right && sides & RectPart.Bottom) {
|
|
|
|
div.style.borderBottomRightRadius = 'inherit';
|
|
|
|
}
|
|
|
|
|
|
|
|
if(options.forMedia) {
|
|
|
|
const mediaDiv = document.createElement('div');
|
|
|
|
mediaDiv.classList.add('album-item-media');
|
|
|
|
|
|
|
|
div.append(mediaDiv);
|
|
|
|
}
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
// div.style.backgroundColor = '#' + Math.floor(Math.random() * (2 ** 24 - 1)).toString(16).padStart(6, '0');
|
|
|
|
});
|
|
|
|
|
|
|
|
/* if(options.forMedia) {
|
|
|
|
layout.forEach((_, i) => {
|
|
|
|
const mediaDiv = document.createElement('div');
|
|
|
|
mediaDiv.classList.add('album-item-media');
|
|
|
|
|
|
|
|
options.container.children[i].append(mediaDiv);
|
|
|
|
});
|
|
|
|
} */
|
|
|
|
}
|