// entityList.js//// Created by Ryan Huffman on November 19th, 2014// Copyright 2014 High Fidelity, Inc.// Copyright 2020 Vircadia contributors.// Copyright 2024-2025 Overte e.V.//// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html const ASCENDING_SORT = 1;const DESCENDING_SORT = -1;const ASCENDING_STRING = "▴";const DESCENDING_STRING = "▾";const BYTES_PER_MEGABYTE = 1024 * 1024;const COLLAPSE_EXTRA_INFO = "E";const EXPAND_EXTRA_INFO = "D";const FILTER_IN_VIEW_ATTRIBUTE = "pressed";const WINDOW_NONVARIABLE_HEIGHT = 180;const EMPTY_ENTITY_ID = "0";const MAX_LENGTH_RADIUS = 9;const MINIMUM_COLUMN_WIDTH = 24;const SCROLLBAR_WIDTH = 20;const RESIZER_WIDTH = 13; //Must be the number of COLUMNS - 1.const DELTA_X_MOVE_COLUMNS_THRESHOLD = 2;const DELTA_X_COLUMN_SWAP_POSITION = 5; function decimalMegabytes(number) { return number ? (number / BYTES_PER_MEGABYTE).toFixed(1) : "";} function displayIfNonZero(number) { return number ? number : "";} function getFilename(url) { let urlParts = url.split("/"); return urlParts[urlParts.length - 1];} const COLUMNS = { type: { columnHeader: "Type", propertyID: "type", initialWidth: 0.16, initiallyShown: true, alwaysShown: true, defaultSortOrder: ASCENDING_SORT, }, parentState: { columnHeader: "A", vglyph: true, dropdownLabel: "Hierarchy", propertyID: "parentState", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, name: { columnHeader: "Name", propertyID: "name", initialWidth: 0.34, initiallyShown: true, alwaysShown: true, defaultSortOrder: ASCENDING_SORT, }, url: { columnHeader: "File", dropdownLabel: "File", propertyID: "url", initialWidth: 0.34, initiallyShown: true, defaultSortOrder: ASCENDING_SORT, }, locked: { columnHeader: "", glyph: true, propertyID: "locked", initialWidth: 0.08, initiallyShown: true, alwaysShown: true, defaultSortOrder: DESCENDING_SORT, }, visible: { columnHeader: "", glyph: true, propertyID: "visible", initialWidth: 0.08, initiallyShown: true, alwaysShown: true, defaultSortOrder: DESCENDING_SORT, }, verticesCount: { columnHeader: "Verts", dropdownLabel: "Vertices", propertyID: "verticesCount", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, texturesCount: { columnHeader: "Texts", dropdownLabel: "Textures", propertyID: "texturesCount", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, texturesSize: { columnHeader: "Text MB", dropdownLabel: "Texture Size", propertyID: "texturesSize", initialWidth: 0.10, format: decimalMegabytes, defaultSortOrder: DESCENDING_SORT, }, hasTransparent: { columnHeader: "", glyph: true, dropdownLabel: "Transparency", propertyID: "hasTransparent", initialWidth: 0.04, defaultSortOrder: DESCENDING_SORT, }, isBaked: { columnHeader: "", glyph: true, dropdownLabel: "Baked", propertyID: "isBaked", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, drawCalls: { columnHeader: "Draws", dropdownLabel: "Draws", propertyID: "drawCalls", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, hasScript: { columnHeader: "k", glyph: true, dropdownLabel: "Script", propertyID: "hasScript", initialWidth: 0.06, defaultSortOrder: DESCENDING_SORT, }, created: { columnHeader: "Created (UTC)", dropdownLabel: "Creation Date", propertyID: "created", initialWidth: 0.38, defaultSortOrder: DESCENDING_SORT, }, lastEdited: { columnHeader: "Modified (UTC)", dropdownLabel: "Modification Date", propertyID: "lastEdited", initialWidth: 0.38, defaultSortOrder: DESCENDING_SORT, }, urlWithPath: { columnHeader: "URL", dropdownLabel: "URL", propertyID: "urlWithPath", initialWidth: 0.54, initiallyShown: false, defaultSortOrder: ASCENDING_SORT, },}; const FILTER_TYPES = [ "Shape", "Model", "Image", "Light", "Zone", "Web", "Material", "ParticleEffect", "ProceduralParticleEffect", "PolyLine", "PolyVox", "Text", "Grid", "Sound", "Canvas", "Empty", "Script",]; const DOUBLE_CLICK_TIMEOUT = 300; // msconst RENAME_COOLDOWN = 400; // ms // List of all entitieslet entities = [];// List of all entities, indexed by Entity IDlet entitiesByID = {};// The filtered and sorted list of entities passed to ListViewlet visibleEntities = [];// List of all entities that are currently selectedlet selectedEntities = []; let entityList = null; // The ListView let hmdMultiSelectMode = false; let lastSelectedEntity;/** * @type EntityListContextMenu */let entityListContextMenu = null; let currentSortColumnID = "type";let currentSortOrder = ASCENDING_SORT;let elSortOrders = {};let typeFilters = [];let isFilterInView = false;let localEntityFilter = false; let columns = [];let columnsByID = {};let lastResizeEvent = null;let resizeColumnIndex = 0;let elTargetTh = null;let elTargetSpan = null;let targetColumnIndex = 0;let lastColumnSwapPosition = -1;let initialThEvent = null;let renameTimeout = null;let renameLastBlur = null;let renameLastEntityID = null;let isRenameFieldBeingMoved = false;let elFilterTypeInputs = {}; let elEntityTable, elEntityTableHeader, elEntityTableBody, elEntityTableScroll, elEntityTableHeaderRow, elRefresh, elToggleLocked, elToggleVisible, elActionsMenu, elSelectionMenu, elTransformMenu, elToolsMenu, elMenuBackgroundOverlay, elLocalEntityFilter, elHmdMultiSelect, elHmdCopy, elHmdCut, elHmdPaste, elHmdDuplicate, elUndo, elRedo, elParent, elUnparent, elDelete, elRotateAsTheNextClickedSurface, elQuickRotate90x, elQuickRotate90y, elQuickRotate90z, elMoveEntitySelectionToAvatar, elSelectAll, elSelectInverse, elSelectNone, elSelectAllInBox, elSelectAllTouchingBox, elSelectParent, elSelectTopParent, elAddChildrenToSelection, elSelectFamily, elSelectTopFamily, elTeleportToEntity, elSetCameraFocusToSelection, elToggleLocalWorldMode, elExportSelectedEntities, elImportEntitiesFromFile, elImportEntitiesFromUrl, elGridActivator, elSnapToGridActivator, elSnapToGridActivatorCaption, elAlignGridToSelection, elAlignGridToAvatar, elBrokenURLReport, elRenderWithZonesManager, elFilterTypeMultiselectBox, elFilterTypeText, elFilterTypeOptions, elFilterTypeOptionsButtons, elFilterTypeSelectAll, elFilterTypeClearAll, elFilterSearch, elFilterInView, elFilterRadius, elExport, elSelectedEntitiesCount, elVisibleEntitiesCount, elNoEntitiesMessage, elColumnsMultiselectBox, elColumnsOptions, elToggleSpaceMode, elRenameInput; const ENABLE_PROFILING = false;let profileIndent = "";const PROFILE_NOOP = function(_name, fn, args) { fn.apply(this, args);} ;const PROFILE = !ENABLE_PROFILING ? PROFILE_NOOP : function(name, fn, args) { console.log("PROFILE-Web " + profileIndent + "(" + name + ") Begin"); let previousIndent = profileIndent; profileIndent += ' '; let before = Date.now(); fn.apply(this, args); let delta = Date.now() - before; profileIndent = previousIndent; console.log("PROFILE-Web " + profileIndent + "(" + name + ") End " + delta + "ms");}; function loaded() { openEventBridge(function() { var isColumnsSettingLoaded = false; elEntityTable = document.getElementById("entity-table"); elEntityTableHeader = document.getElementById("entity-table-header"); elEntityTableBody = document.getElementById("entity-table-body"); elEntityTableScroll = document.getElementById("entity-table-scroll"); elRefresh = document.getElementById("refresh"); elToggleLocked = document.getElementById("locked"); elToggleVisible = document.getElementById("visible"); elHmdMultiSelect = document.getElementById("hmdmultiselect"); elActionsMenu = document.getElementById("actions"); elSelectionMenu = document.getElementById("selection"); elTransformMenu = document.getElementById("transform"); elToolsMenu = document.getElementById("tools"); elMenuBackgroundOverlay = document.getElementById("menuBackgroundOverlay"); elLocalEntityFilter = document.getElementById("localEntityFilter"); elHmdCopy = document.getElementById("hmdcopy"); elHmdCopyID = document.getElementById("hmdcopyid"); elHmdCut = document.getElementById("hmdcut"); elHmdPaste = document.getElementById("hmdpaste"); elHmdDuplicate = document.getElementById("hmdduplicate"); elUndo = document.getElementById("undo"); elRedo = document.getElementById("redo"); elParent = document.getElementById("parent"); elUnparent = document.getElementById("unparent"); elDelete = document.getElementById("delete"); elRotateAsTheNextClickedSurface = document.getElementById("rotateAsTheNextClickedSurface"); elQuickRotate90x = document.getElementById("quickRotate90x"); elQuickRotate90y = document.getElementById("quickRotate90y"); elQuickRotate90z = document.getElementById("quickRotate90z"); elMoveEntitySelectionToAvatar = document.getElementById("moveEntitySelectionToAvatar"); elSelectAll = document.getElementById("selectall"); elSelectInverse = document.getElementById("selectinverse"); elSelectNone = document.getElementById("selectnone"); elSelectAllInBox = document.getElementById("selectallinbox"); elSelectAllTouchingBox = document.getElementById("selectalltouchingbox"); elSelectParent = document.getElementById("selectparent"); elSelectTopParent = document.getElementById("selecttopparent"); elAddChildrenToSelection = document.getElementById("addchildrentoselection"); elSelectFamily = document.getElementById("selectfamily"); elSelectTopFamily = document.getElementById("selecttopfamily"); elTeleportToEntity = document.getElementById("teleport-to-entity"); elSetCameraFocusToSelection = document.getElementById("setCameraFocusToSelection"); elToggleLocalWorldMode = document.getElementById("toggleLocalWorldMode"); elExportSelectedEntities = document.getElementById("exportSelectedEntities"); elImportEntitiesFromFile = document.getElementById("importEntitiesFromFile"); elImportEntitiesFromUrl = document.getElementById("importEntitiesFromUrl"); elGridActivator = document.getElementById("gridActivator"); elSnapToGridActivator = document.getElementById("snapToGridActivator"); elSnapToGridActivatorCaption = document.getElementById("snapToGridActivatorCaption"); elAlignGridToSelection = document.getElementById("alignGridToSelection"); elAlignGridToAvatar = document.getElementById("alignGridToAvatar"); elBrokenURLReport = document.getElementById("brokenURLReport"); elRenderWithZonesManager = document.getElementById("renderWithZonesManager"); elFilterTypeMultiselectBox = document.getElementById("filter-type-multiselect-box"); elFilterTypeText = document.getElementById("filter-type-text"); elFilterTypeOptions = document.getElementById("filter-type-options"); elFilterTypeOptionsButtons = document.getElementById("filter-type-options-buttons"); elFilterTypeSelectAll = document.getElementById('filter-type-select-all'); elFilterTypeClearAll = document.getElementById('filter-type-clear-all'); elFilterSearch = document.getElementById("filter-search"); elFilterInView = document.getElementById("filter-in-view"); elFilterRadius = document.getElementById("filter-radius"); elExport = document.getElementById("export"); elSelectedEntitiesCount = document.getElementById("selected-entities-count"); elVisibleEntitiesCount = document.getElementById("visible-entities-count"); elNoEntitiesMessage = document.getElementById("no-entities"); elColumnsMultiselectBox = document.getElementById("entity-table-columns-multiselect-box"); elColumnsOptions = document.getElementById("entity-table-columns-options"); elToggleSpaceMode = document.getElementById("toggle-space-mode"); document.body.onclick = onBodyClick; elToggleLocked.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "toggleLocked" })); }; elToggleVisible.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "toggleVisible" })); }; elExport.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "export"})); }; elLocalEntityFilter.onclick = function() { if (localEntityFilter) { elLocalEntityFilter.className = "localEntity glyph"; localEntityFilter = false; } else { elLocalEntityFilter.className = "selLocalEntity glyph"; localEntityFilter = true; } EventBridge.emitWebEvent(JSON.stringify({ "type": "localEntityFilter", "localEntityFilter": localEntityFilter })); }; elHmdMultiSelect.onclick = function() { if (hmdMultiSelectMode) { elHmdMultiSelect.className = "vglyph"; hmdMultiSelectMode = false; } else { elHmdMultiSelect.className = "white vglyph"; hmdMultiSelectMode = true; } EventBridge.emitWebEvent(JSON.stringify({ type: "hmdMultiSelectMode", value: hmdMultiSelectMode })); }; elActionsMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("actions-menu").style.display = "block"; }; elSelectionMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("selection-menu").style.display = "block"; }; elTransformMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("transform-menu").style.display = "block"; }; elToolsMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("tools-menu").style.display = "block"; }; elMenuBackgroundOverlay.onclick = function() { closeAllEntityListMenu(); }; elHmdCopy.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "copy" })); closeAllEntityListMenu(); }; elHmdCopyID.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "copyID" })); closeAllEntityListMenu(); }; elHmdCut.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "cut" })); closeAllEntityListMenu(); }; elHmdPaste.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "paste" })); closeAllEntityListMenu(); }; elHmdDuplicate.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "duplicate" })); closeAllEntityListMenu(); }; elParent.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "parent" })); closeAllEntityListMenu(); }; elUnparent.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "unparent" })); closeAllEntityListMenu(); }; elUndo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "undo" })); closeAllEntityListMenu(); }; elRedo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "redo" })); closeAllEntityListMenu(); }; elDelete.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "delete" })); closeAllEntityListMenu(); }; elRotateAsTheNextClickedSurface.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "rotateAsTheNextClickedSurface" })); closeAllEntityListMenu(); }; elQuickRotate90x.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90x" })); closeAllEntityListMenu(); }; elQuickRotate90y.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90y" })); closeAllEntityListMenu(); }; elQuickRotate90z.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90z" })); closeAllEntityListMenu(); }; elMoveEntitySelectionToAvatar.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "moveEntitySelectionToAvatar" })); closeAllEntityListMenu();Lines 1–500 of 1956. Load more
// entityList.js // // Created by Ryan Huffman on November 19th, 2014 // Copyright 2014 High Fidelity, Inc. // Copyright 2020 Vircadia contributors. // Copyright 2024-2025 Overte e.V. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html const ASCENDING_SORT = 1; const DESCENDING_SORT = -1; const ASCENDING_STRING = "▴"; const DESCENDING_STRING = "▾"; const BYTES_PER_MEGABYTE = 1024 * 1024; const COLLAPSE_EXTRA_INFO = "E"; const EXPAND_EXTRA_INFO = "D"; const FILTER_IN_VIEW_ATTRIBUTE = "pressed"; const WINDOW_NONVARIABLE_HEIGHT = 180; const EMPTY_ENTITY_ID = "0"; const MAX_LENGTH_RADIUS = 9; const MINIMUM_COLUMN_WIDTH = 24; const SCROLLBAR_WIDTH = 20; const RESIZER_WIDTH = 13; //Must be the number of COLUMNS - 1. const DELTA_X_MOVE_COLUMNS_THRESHOLD = 2; const DELTA_X_COLUMN_SWAP_POSITION = 5; function decimalMegabytes(number) { return number ? (number / BYTES_PER_MEGABYTE).toFixed(1) : ""; } function displayIfNonZero(number) { return number ? number : ""; } function getFilename(url) { let urlParts = url.split("/"); return urlParts[urlParts.length - 1]; } const COLUMNS = { type: { columnHeader: "Type", propertyID: "type", initialWidth: 0.16, initiallyShown: true, alwaysShown: true, defaultSortOrder: ASCENDING_SORT, }, parentState: { columnHeader: "A", vglyph: true, dropdownLabel: "Hierarchy", propertyID: "parentState", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, name: { columnHeader: "Name", propertyID: "name", initialWidth: 0.34, initiallyShown: true, alwaysShown: true, defaultSortOrder: ASCENDING_SORT, }, url: { columnHeader: "File", dropdownLabel: "File", propertyID: "url", initialWidth: 0.34, initiallyShown: true, defaultSortOrder: ASCENDING_SORT, }, locked: { columnHeader: "", glyph: true, propertyID: "locked", initialWidth: 0.08, initiallyShown: true, alwaysShown: true, defaultSortOrder: DESCENDING_SORT, }, visible: { columnHeader: "", glyph: true, propertyID: "visible", initialWidth: 0.08, initiallyShown: true, alwaysShown: true, defaultSortOrder: DESCENDING_SORT, }, verticesCount: { columnHeader: "Verts", dropdownLabel: "Vertices", propertyID: "verticesCount", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, texturesCount: { columnHeader: "Texts", dropdownLabel: "Textures", propertyID: "texturesCount", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, texturesSize: { columnHeader: "Text MB", dropdownLabel: "Texture Size", propertyID: "texturesSize", initialWidth: 0.10, format: decimalMegabytes, defaultSortOrder: DESCENDING_SORT, }, hasTransparent: { columnHeader: "", glyph: true, dropdownLabel: "Transparency", propertyID: "hasTransparent", initialWidth: 0.04, defaultSortOrder: DESCENDING_SORT, }, isBaked: { columnHeader: "", glyph: true, dropdownLabel: "Baked", propertyID: "isBaked", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, drawCalls: { columnHeader: "Draws", dropdownLabel: "Draws", propertyID: "drawCalls", initialWidth: 0.08, defaultSortOrder: DESCENDING_SORT, }, hasScript: { columnHeader: "k", glyph: true, dropdownLabel: "Script", propertyID: "hasScript", initialWidth: 0.06, defaultSortOrder: DESCENDING_SORT, }, created: { columnHeader: "Created (UTC)", dropdownLabel: "Creation Date", propertyID: "created", initialWidth: 0.38, defaultSortOrder: DESCENDING_SORT, }, lastEdited: { columnHeader: "Modified (UTC)", dropdownLabel: "Modification Date", propertyID: "lastEdited", initialWidth: 0.38, defaultSortOrder: DESCENDING_SORT, }, urlWithPath: { columnHeader: "URL", dropdownLabel: "URL", propertyID: "urlWithPath", initialWidth: 0.54, initiallyShown: false, defaultSortOrder: ASCENDING_SORT, }, }; const FILTER_TYPES = [ "Shape", "Model", "Image", "Light", "Zone", "Web", "Material", "ParticleEffect", "ProceduralParticleEffect", "PolyLine", "PolyVox", "Text", "Grid", "Sound", "Canvas", "Empty", "Script", ]; const DOUBLE_CLICK_TIMEOUT = 300; // ms const RENAME_COOLDOWN = 400; // ms // List of all entities let entities = []; // List of all entities, indexed by Entity ID let entitiesByID = {}; // The filtered and sorted list of entities passed to ListView let visibleEntities = []; // List of all entities that are currently selected let selectedEntities = []; let entityList = null; // The ListView let hmdMultiSelectMode = false; let lastSelectedEntity; /** * @type EntityListContextMenu */ let entityListContextMenu = null; let currentSortColumnID = "type"; let currentSortOrder = ASCENDING_SORT; let elSortOrders = {}; let typeFilters = []; let isFilterInView = false; let localEntityFilter = false; let columns = []; let columnsByID = {}; let lastResizeEvent = null; let resizeColumnIndex = 0; let elTargetTh = null; let elTargetSpan = null; let targetColumnIndex = 0; let lastColumnSwapPosition = -1; let initialThEvent = null; let renameTimeout = null; let renameLastBlur = null; let renameLastEntityID = null; let isRenameFieldBeingMoved = false; let elFilterTypeInputs = {}; let elEntityTable, elEntityTableHeader, elEntityTableBody, elEntityTableScroll, elEntityTableHeaderRow, elRefresh, elToggleLocked, elToggleVisible, elActionsMenu, elSelectionMenu, elTransformMenu, elToolsMenu, elMenuBackgroundOverlay, elLocalEntityFilter, elHmdMultiSelect, elHmdCopy, elHmdCut, elHmdPaste, elHmdDuplicate, elUndo, elRedo, elParent, elUnparent, elDelete, elRotateAsTheNextClickedSurface, elQuickRotate90x, elQuickRotate90y, elQuickRotate90z, elMoveEntitySelectionToAvatar, elSelectAll, elSelectInverse, elSelectNone, elSelectAllInBox, elSelectAllTouchingBox, elSelectParent, elSelectTopParent, elAddChildrenToSelection, elSelectFamily, elSelectTopFamily, elTeleportToEntity, elSetCameraFocusToSelection, elToggleLocalWorldMode, elExportSelectedEntities, elImportEntitiesFromFile, elImportEntitiesFromUrl, elGridActivator, elSnapToGridActivator, elSnapToGridActivatorCaption, elAlignGridToSelection, elAlignGridToAvatar, elBrokenURLReport, elRenderWithZonesManager, elFilterTypeMultiselectBox, elFilterTypeText, elFilterTypeOptions, elFilterTypeOptionsButtons, elFilterTypeSelectAll, elFilterTypeClearAll, elFilterSearch, elFilterInView, elFilterRadius, elExport, elSelectedEntitiesCount, elVisibleEntitiesCount, elNoEntitiesMessage, elColumnsMultiselectBox, elColumnsOptions, elToggleSpaceMode, elRenameInput; const ENABLE_PROFILING = false; let profileIndent = ""; const PROFILE_NOOP = function(_name, fn, args) { fn.apply(this, args); } ; const PROFILE = !ENABLE_PROFILING ? PROFILE_NOOP : function(name, fn, args) { console.log("PROFILE-Web " + profileIndent + "(" + name + ") Begin"); let previousIndent = profileIndent; profileIndent += ' '; let before = Date.now(); fn.apply(this, args); let delta = Date.now() - before; profileIndent = previousIndent; console.log("PROFILE-Web " + profileIndent + "(" + name + ") End " + delta + "ms"); }; function loaded() { openEventBridge(function() { var isColumnsSettingLoaded = false; elEntityTable = document.getElementById("entity-table"); elEntityTableHeader = document.getElementById("entity-table-header"); elEntityTableBody = document.getElementById("entity-table-body"); elEntityTableScroll = document.getElementById("entity-table-scroll"); elRefresh = document.getElementById("refresh"); elToggleLocked = document.getElementById("locked"); elToggleVisible = document.getElementById("visible"); elHmdMultiSelect = document.getElementById("hmdmultiselect"); elActionsMenu = document.getElementById("actions"); elSelectionMenu = document.getElementById("selection"); elTransformMenu = document.getElementById("transform"); elToolsMenu = document.getElementById("tools"); elMenuBackgroundOverlay = document.getElementById("menuBackgroundOverlay"); elLocalEntityFilter = document.getElementById("localEntityFilter"); elHmdCopy = document.getElementById("hmdcopy"); elHmdCopyID = document.getElementById("hmdcopyid"); elHmdCut = document.getElementById("hmdcut"); elHmdPaste = document.getElementById("hmdpaste"); elHmdDuplicate = document.getElementById("hmdduplicate"); elUndo = document.getElementById("undo"); elRedo = document.getElementById("redo"); elParent = document.getElementById("parent"); elUnparent = document.getElementById("unparent"); elDelete = document.getElementById("delete"); elRotateAsTheNextClickedSurface = document.getElementById("rotateAsTheNextClickedSurface"); elQuickRotate90x = document.getElementById("quickRotate90x"); elQuickRotate90y = document.getElementById("quickRotate90y"); elQuickRotate90z = document.getElementById("quickRotate90z"); elMoveEntitySelectionToAvatar = document.getElementById("moveEntitySelectionToAvatar"); elSelectAll = document.getElementById("selectall"); elSelectInverse = document.getElementById("selectinverse"); elSelectNone = document.getElementById("selectnone"); elSelectAllInBox = document.getElementById("selectallinbox"); elSelectAllTouchingBox = document.getElementById("selectalltouchingbox"); elSelectParent = document.getElementById("selectparent"); elSelectTopParent = document.getElementById("selecttopparent"); elAddChildrenToSelection = document.getElementById("addchildrentoselection"); elSelectFamily = document.getElementById("selectfamily"); elSelectTopFamily = document.getElementById("selecttopfamily"); elTeleportToEntity = document.getElementById("teleport-to-entity"); elSetCameraFocusToSelection = document.getElementById("setCameraFocusToSelection"); elToggleLocalWorldMode = document.getElementById("toggleLocalWorldMode"); elExportSelectedEntities = document.getElementById("exportSelectedEntities"); elImportEntitiesFromFile = document.getElementById("importEntitiesFromFile"); elImportEntitiesFromUrl = document.getElementById("importEntitiesFromUrl"); elGridActivator = document.getElementById("gridActivator"); elSnapToGridActivator = document.getElementById("snapToGridActivator"); elSnapToGridActivatorCaption = document.getElementById("snapToGridActivatorCaption"); elAlignGridToSelection = document.getElementById("alignGridToSelection"); elAlignGridToAvatar = document.getElementById("alignGridToAvatar"); elBrokenURLReport = document.getElementById("brokenURLReport"); elRenderWithZonesManager = document.getElementById("renderWithZonesManager"); elFilterTypeMultiselectBox = document.getElementById("filter-type-multiselect-box"); elFilterTypeText = document.getElementById("filter-type-text"); elFilterTypeOptions = document.getElementById("filter-type-options"); elFilterTypeOptionsButtons = document.getElementById("filter-type-options-buttons"); elFilterTypeSelectAll = document.getElementById('filter-type-select-all'); elFilterTypeClearAll = document.getElementById('filter-type-clear-all'); elFilterSearch = document.getElementById("filter-search"); elFilterInView = document.getElementById("filter-in-view"); elFilterRadius = document.getElementById("filter-radius"); elExport = document.getElementById("export"); elSelectedEntitiesCount = document.getElementById("selected-entities-count"); elVisibleEntitiesCount = document.getElementById("visible-entities-count"); elNoEntitiesMessage = document.getElementById("no-entities"); elColumnsMultiselectBox = document.getElementById("entity-table-columns-multiselect-box"); elColumnsOptions = document.getElementById("entity-table-columns-options"); elToggleSpaceMode = document.getElementById("toggle-space-mode"); document.body.onclick = onBodyClick; elToggleLocked.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "toggleLocked" })); }; elToggleVisible.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "toggleVisible" })); }; elExport.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "export"})); }; elLocalEntityFilter.onclick = function() { if (localEntityFilter) { elLocalEntityFilter.className = "localEntity glyph"; localEntityFilter = false; } else { elLocalEntityFilter.className = "selLocalEntity glyph"; localEntityFilter = true; } EventBridge.emitWebEvent(JSON.stringify({ "type": "localEntityFilter", "localEntityFilter": localEntityFilter })); }; elHmdMultiSelect.onclick = function() { if (hmdMultiSelectMode) { elHmdMultiSelect.className = "vglyph"; hmdMultiSelectMode = false; } else { elHmdMultiSelect.className = "white vglyph"; hmdMultiSelectMode = true; } EventBridge.emitWebEvent(JSON.stringify({ type: "hmdMultiSelectMode", value: hmdMultiSelectMode })); }; elActionsMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("actions-menu").style.display = "block"; }; elSelectionMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("selection-menu").style.display = "block"; }; elTransformMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("transform-menu").style.display = "block"; }; elToolsMenu.onclick = function() { document.getElementById("menuBackgroundOverlay").style.display = "block"; document.getElementById("tools-menu").style.display = "block"; }; elMenuBackgroundOverlay.onclick = function() { closeAllEntityListMenu(); }; elHmdCopy.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "copy" })); closeAllEntityListMenu(); }; elHmdCopyID.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "copyID" })); closeAllEntityListMenu(); }; elHmdCut.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "cut" })); closeAllEntityListMenu(); }; elHmdPaste.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "paste" })); closeAllEntityListMenu(); }; elHmdDuplicate.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "duplicate" })); closeAllEntityListMenu(); }; elParent.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "parent" })); closeAllEntityListMenu(); }; elUnparent.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "unparent" })); closeAllEntityListMenu(); }; elUndo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "undo" })); closeAllEntityListMenu(); }; elRedo.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "redo" })); closeAllEntityListMenu(); }; elDelete.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "delete" })); closeAllEntityListMenu(); }; elRotateAsTheNextClickedSurface.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "rotateAsTheNextClickedSurface" })); closeAllEntityListMenu(); }; elQuickRotate90x.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90x" })); closeAllEntityListMenu(); }; elQuickRotate90y.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90y" })); closeAllEntityListMenu(); }; elQuickRotate90z.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "quickRotate90z" })); closeAllEntityListMenu(); }; elMoveEntitySelectionToAvatar.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: "moveEntitySelectionToAvatar" })); closeAllEntityListMenu();