import { createElement } from "../../lib/skeleton/index.js";
import { qs, safe } from "../../lib/dom.js";
import { animate, slideYIn } from "../../lib/animate.js";
import { loadCSS } from "../../helpers/loader.js";
import { isSDK } from "../../helpers/sdk.js";
import assert from "../../lib/assert.js";
import "../../components/dropdown.js";
export default class ComponentMenubar extends HTMLElement {
constructor() {
super();
this.classList.add("component_menubar");
this.innerHTML = `
${safe(this.getAttribute("filename")) || " "}
`;
if (new URLSearchParams(location.search).get("nav") === "false") {
const $container = assert.type(this.firstElementChild, HTMLElement);
$container.classList.add("inherit-width");
}
}
async connectedCallback() {
const $title = assert.type(this.querySelector(".titlebar"), HTMLElement);
this.timeoutID = setTimeout(() => animate($title, {
time: 250,
keyframes: slideYIn(2),
onExit: () => $title.style.opacity = 1,
}), 100);
}
disconnectedCallback() {
clearTimeout(this.timeoutID);
}
render(buttons) {
const $item = assert.type(this.querySelector(".action-item"), HTMLElement);
for (let i=buttons.length-1; i>=0; i--) {
$item.appendChild(buttons[i]);
}
animate($item, { time: 250, keyframes: slideYIn(2) });
}
add($button) {
const $item = assert.type(this.querySelector(".action-item"), HTMLElement);
$item.prepend($button);
animate($button, { time: 250, keyframes: slideYIn(2) });
return $button;
}
}
export function buttonDownload(name, link) {
const ICON = {
DOWNLOAD: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzODQgNTEyIj4KICA8cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNIDM2MCw0NjAgSCAyNCBDIDEwLjcsNDYwIDAsNDUzLjMgMCw0NDAgdiAtMTIgYyAwLC0xMy4zIDEwLjcsLTIwIDI0LC0yMCBoIDMzNiBjIDEzLjMsMCAyNCw2LjcgMjQsMjAgdiAxMiBjIDAsMTMuMyAtMTAuNywyMCAtMjQsMjAgeiIgLz4KICA8cGF0aCBmaWxsPSIjZjJmMmYyIiBkPSJNIDIyNi41NTM5LDIzNC44ODQyOCBWIDUyLjk0MzI4MyBjIDAsLTYuNjI3IC01LjM3MywtMTIgLTEyLC0xMiBoIC00NCBjIC02LjYyNywwIC0xMiw1LjM3MyAtMTIsMTIgViAyMzQuODg0MjggaCAtNTIuMDU5IGMgLTIxLjM4MiwwIC0zMi4wOSwyNS44NTEgLTE2Ljk3MSw0MC45NzEgbCA4Ni4wNTksODYuMDU5IGMgOS4zNzMsOS4zNzMgMjQuNTY5LDkuMzczIDMzLjk0MSwwIGwgODYuMDU5LC04Ni4wNTkgYyAxNS4xMTksLTE1LjExOSA0LjQxMSwtNDAuOTcxIC0xNi45NzEsLTQwLjk3MSB6IiAvPgo8L3N2Zz4K",
LOADING: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0nMTIwcHgnIGhlaWdodD0nMTIwcHgnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIiBjbGFzcz0idWlsLXJpbmctYWx0Ij4KICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgY2xhc3M9ImJrIj48L3JlY3Q+CiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNDAiIHN0cm9rZT0ibm9uZSIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48L2NpcmNsZT4KICA8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSI0MCIgc3Ryb2tlPSIjZmZmZmZmIiBmaWxsPSJub25lIiBzdHJva2Utd2lkdGg9IjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+CiAgICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJzdHJva2UtZGFzaG9mZnNldCIgZHVyPSIycyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGZyb209IjAiIHRvPSI1MDIiPjwvYW5pbWF0ZT4KICAgIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InN0cm9rZS1kYXNoYXJyYXkiIGR1cj0iMnMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiB2YWx1ZXM9IjE1MC42IDEwMC40OzEgMjUwOzE1MC42IDEwMC40Ij48L2FuaW1hdGU+CiAgPC9jaXJjbGU+Cjwvc3ZnPgo=",
};
const $el = createElement(`
`);
const $img = qs($el, "img");
qs($el, "a").onclick = () => {
if (isSDK()) return;
document.cookie = "download=yes; path=/; max-age=120;";
$img.setAttribute("src", ICON.LOADING);
const id = setInterval(() => {
if (/download=yes/.test(document.cookie) !== false) return;
clearInterval(id);
$img.setAttribute("src", ICON.DOWNLOAD);
}, 500);
};
return $el;
}
export function buttonFullscreen($screen, fullscreen) {
let fullscreenHandler = fullscreen;
if (!fullscreen) {
if ("webkitRequestFullscreen" in document.body) {
fullscreenHandler = () => $screen.webkitRequestFullscreen();
} else if ("mozRequestFullScreen" in document.body) {
fullscreenHandler = () => $screen.mozRequestFullScreen();
}
}
if (!fullscreenHandler) return document.createDocumentFragment();
const $el = createElement(`
`);
$el.onclick = fullscreenHandler;
return $el;
}
export function renderMenubar($menubar, ...buttons) {
assert.type($menubar, ComponentMenubar);
$menubar.render(buttons.filter(($button) => $button));
return $menubar;
}
export async function init() {
return loadCSS(import.meta.url, "./component_menubar.css");
}
if (!customElements.get("component-menubar"))
customElements.define("component-menubar", ComponentMenubar);