UNPKG

@quick-game/cli

Version:

Command line interface for rapid qg development

150 lines 5.84 kB
// Copyright 2021 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // TODO(crbug.com/1167717): Make this a const enum again // eslint-disable-next-line rulesdir/const_enum export var RegisteredAdorners; (function (RegisteredAdorners) { RegisteredAdorners["GRID"] = "grid"; RegisteredAdorners["SUBGRID"] = "subgrid"; RegisteredAdorners["FLEX"] = "flex"; RegisteredAdorners["AD"] = "ad"; RegisteredAdorners["SCROLL_SNAP"] = "scroll-snap"; RegisteredAdorners["CONTAINER"] = "container"; RegisteredAdorners["SLOT"] = "slot"; RegisteredAdorners["TOP_LAYER"] = "top-layer"; RegisteredAdorners["REVEAL"] = "reveal"; })(RegisteredAdorners || (RegisteredAdorners = {})); // This enum-like const object serves as the authoritative registry for all the // adorners available. export function getRegisteredAdorner(which) { switch (which) { case RegisteredAdorners.GRID: return { name: 'grid', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.SUBGRID: return { name: 'subgrid', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.FLEX: return { name: 'flex', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.AD: return { name: 'ad', category: "Security" /* AdornerCategories.SECURITY */, enabledByDefault: true, }; case RegisteredAdorners.SCROLL_SNAP: return { name: 'scroll-snap', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.CONTAINER: return { name: 'container', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.SLOT: return { name: 'slot', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.TOP_LAYER: return { name: 'top-layer', category: "Layout" /* AdornerCategories.LAYOUT */, enabledByDefault: true, }; case RegisteredAdorners.REVEAL: return { name: 'reveal', category: "Default" /* AdornerCategories.DEFAULT */, enabledByDefault: true, }; } } let adornerNameToCategoryMap = undefined; function getCategoryFromAdornerName(name) { if (!adornerNameToCategoryMap) { adornerNameToCategoryMap = new Map(); for (const { name, category } of Object.values(RegisteredAdorners).map(getRegisteredAdorner)) { adornerNameToCategoryMap.set(name, category); } } return adornerNameToCategoryMap.get(name) || "Default" /* AdornerCategories.DEFAULT */; } export const DefaultAdornerSettings = Object.values(RegisteredAdorners).map(getRegisteredAdorner).map(({ name, enabledByDefault }) => ({ adorner: name, isEnabled: enabledByDefault, })); export class AdornerManager { #adornerSettings = new Map(); #settingStore; constructor(settingStore) { this.#settingStore = settingStore; this.#syncSettings(); } updateSettings(settings) { this.#adornerSettings = settings; this.#persistCurrentSettings(); } getSettings() { return this.#adornerSettings; } isAdornerEnabled(adornerText) { return this.#adornerSettings.get(adornerText) || false; } #persistCurrentSettings() { const settingList = []; for (const [adorner, isEnabled] of this.#adornerSettings) { settingList.push({ adorner, isEnabled }); } this.#settingStore.set(settingList); } #loadSettings() { const settingList = this.#settingStore.get(); for (const setting of settingList) { this.#adornerSettings.set(setting.adorner, setting.isEnabled); } } #syncSettings() { this.#loadSettings(); // Prune outdated adorners and add new ones to the persistence. const outdatedAdorners = new Set(this.#adornerSettings.keys()); for (const { adorner, isEnabled } of DefaultAdornerSettings) { outdatedAdorners.delete(adorner); if (!this.#adornerSettings.has(adorner)) { this.#adornerSettings.set(adorner, isEnabled); } } for (const outdatedAdorner of outdatedAdorners) { this.#adornerSettings.delete(outdatedAdorner); } this.#persistCurrentSettings(); } } const OrderedAdornerCategories = [ "Security" /* AdornerCategories.SECURITY */, "Layout" /* AdornerCategories.LAYOUT */, "Default" /* AdornerCategories.DEFAULT */, ]; // Use idx + 1 for the order to avoid JavaScript's 0 == false issue export const AdornerCategoryOrder = new Map(OrderedAdornerCategories.map((category, idx) => [category, idx + 1])); export function compareAdornerNamesByCategory(nameA, nameB) { const orderA = AdornerCategoryOrder.get(getCategoryFromAdornerName(nameA)) || Number.POSITIVE_INFINITY; const orderB = AdornerCategoryOrder.get(getCategoryFromAdornerName(nameB)) || Number.POSITIVE_INFINITY; return orderA - orderB; } //# sourceMappingURL=AdornerManager.js.map